home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / prodpack.zip / DB4PPSRC.EXE / GENCODE.PRG < prev    next >
Text File  |  1993-05-25  |  153KB  |  5,648 lines

  1. *' $Header:   C:/test/ccppdbb/prgs/gencode.prv   1.0   06 May 1993  8:14:14   Bill Ramos  $
  2. PROCEDURE GenCode
  3. PARAMETERS pcDbfDial
  4. *----------------------------------------------------------------------------
  5. * NAME
  6. *   GenCode - Create dialog program for DBF file
  7. *
  8. * DESCRIPTION
  9. *
  10. * PARAMETERS
  11. *   pcDbfDial  = name of the dialog dbf file
  12. *
  13. *----------------------------------------------------------------------------
  14.  
  15.   IF SET( "TALK" ) = "ON"
  16.     SET TALK OFF
  17.     lTalk = .T.
  18.   ELSE
  19.     lTalk = .F.
  20.   ENDIF
  21.   lSafety = SET( "SAFETY" ) = "ON"
  22.   SET SAFETY OFF
  23.  
  24.   IF OpenFile( pcDbfDial )
  25.     gn_OdMax  = 27
  26.     gn_OdCur  = 0
  27.     gn_OdLeft = 0
  28.     gn_OdRight = 0
  29.     gc_OdText = [Generating dialog box: ] + pcDbfDial
  30.     gc_OdBoxCl = ""
  31.     DO _Odomet
  32.  
  33.     ERASE ( pcDbfDial + ".win" )
  34.     ERASE ( pcDbfDial + ".dbo" )
  35.     SET CONSOLE OFF
  36.  
  37.     nDlgDef = 0
  38.     STORE .F. TO bt, ef, cd, cs, cl, lb, ck, rb, ud
  39.  
  40.     DO DefPublic
  41.  
  42.     gn_OdCur  = gn_OdCur + 1
  43.     DO _Odomet
  44.  
  45.  
  46.     DO GenStart                         && Used to be PROCEDURE DialDrvr
  47.  
  48.     gn_OdCur  = gn_OdCur + 1
  49.     DO _Odomet
  50.  
  51.     DO GenDialS                         && PROCEDURE Dialog startup
  52.  
  53.     gn_OdCur  = gn_OdCur + 1
  54.     DO _Odomet
  55.  
  56.     DO GenInitO                         && PROCEDURE Dialog Init objects
  57.  
  58.     gn_OdCur  = gn_OdCur + 1
  59.     DO _Odomet
  60.  
  61.     DO GenDraw                          && PROCEDURE DrawDial
  62.  
  63.     gn_OdCur  = gn_OdCur + 1
  64.     DO _Odomet
  65.  
  66.  
  67.     DO GTstatic                         && PROCEDURE TStatic
  68.  
  69.     gn_OdCur  = gn_OdCur + 1
  70.     DO _Odomet
  71.  
  72.     DO GHasTitle
  73.  
  74.     gn_OdCur  = gn_OdCur + 1
  75.     DO _Odomet
  76.  
  77.     DO GGetMess
  78.  
  79.     gn_OdCur  = gn_OdCur + 1
  80.     DO _Odomet
  81.  
  82.     IF bt .OR. ck .OR. rb
  83.       DO GGetWait
  84.       DO GTButton
  85.     ENDIF
  86.  
  87.  
  88.     gn_OdCur  = gn_OdCur + 1
  89.     DO _Odomet
  90.  
  91.     IF ef .OR. cs
  92.       DO GGetEdit
  93.       DO GTEdit
  94.     ENDIF
  95.  
  96.  
  97.     gn_OdCur  = gn_OdCur + 1
  98.     DO _Odomet
  99.  
  100.     IF lb .OR. cd .OR. cs .OR. cl
  101.       DO GTlist
  102.       DO GTabOut
  103.       IF cd .OR. cs .OR. cl
  104.         DO GTCombo
  105.         IF cd
  106.           DO GGetDD
  107.         ENDIF
  108.         IF cl
  109.           DO GGetDDL
  110.         ENDIF
  111.       ENDIF
  112.     ENDIF
  113.  
  114.  
  115.     gn_OdCur  = gn_OdCur + 1
  116.     DO _Odomet
  117.  
  118.     IF ud
  119.       DO GTUser
  120.       IF .NOT. (lb .OR. cd .OR. cs .OR. cl)
  121.         DO GTabOut
  122.       ENDIF
  123.     ENDIF
  124.  
  125.  
  126.     gn_OdCur  = gn_OdCur + 1
  127.     DO _Odomet
  128.  
  129.     DO GSetOnKey
  130.  
  131.     gn_OdCur  = gn_OdCur + 1
  132.     DO _Odomet
  133.  
  134.     DO GClrOnKey
  135.  
  136.     gn_OdCur  = gn_OdCur + 1
  137.     DO _Odomet
  138.  
  139.     DO GAKeyHand
  140.  
  141.     gn_OdCur  = gn_OdCur + 1
  142.     DO _Odomet
  143.  
  144.     DO GCkWaitAc
  145.  
  146.     gn_OdCur  = gn_OdCur + 1
  147.     DO _Odomet
  148.  
  149.     DO GGetMsTo
  150.  
  151.     gn_OdCur  = gn_OdCur + 1
  152.     DO _Odomet
  153.  
  154.     DO GMsHand
  155.  
  156.  
  157.     gn_OdCur  = gn_OdCur + 1
  158.     DO _Odomet
  159.  
  160.     DO GDispatch
  161.  
  162.     gn_OdCur  = gn_OdCur + 1
  163.     DO _Odomet
  164.  
  165.     DO GDisp
  166.  
  167.     gn_OdCur  = gn_OdCur + 1
  168.     DO _Odomet
  169.  
  170.     DO GGetNext
  171.  
  172.     gn_OdCur  = gn_OdCur + 1
  173.     DO _Odomet
  174.  
  175.     DO GWhenOk
  176.  
  177.  
  178.     gn_OdCur  = gn_OdCur + 1
  179.     DO _Odomet
  180.  
  181.     DO GGetId
  182.  
  183.  
  184.     gn_OdCur  = gn_OdCur + 1
  185.     DO _Odomet
  186.  
  187.     DO GPostVals
  188.  
  189.     gn_OdCur  = gn_OdCur + 1
  190.     DO _Odomet
  191.  
  192.     DO GReleObjs
  193.  
  194.     gn_OdCur  = gn_OdCur + 1
  195.     DO _Odomet
  196.  
  197.     DO GGenArray
  198.  
  199.     gn_OdCur  = gn_OdCur + 1
  200.     DO _Odomet
  201.  
  202.     Do ClsFile
  203.  
  204.     gn_OdCur  = gn_OdCur + 1
  205.     DO _Odomet
  206.  
  207.     COMPILE ( pcDbfDial )
  208.  
  209.     gn_OdCur  = gn_OdCur + 30
  210.     DO _Odomet
  211.  
  212.     SET CONSOLE ON
  213.   ENDIF
  214.  
  215.   IF lSafety
  216.     SET SAFETY ON
  217.   ENDIF
  218.   IF lTalk
  219.     SET TALK ON
  220.   ENDIF
  221. RETURN
  222. *-- EOP: GenCode WITH pcDbfDial
  223.  
  224. PROCEDURE DefPublic
  225. *----------------------------------------------------------------------------
  226. * NAME
  227. *   DefPublic -
  228. *
  229. * DESCRIPTION
  230. *
  231. *----------------------------------------------------------------------------
  232.   PUBLIC cClrDlg, cClrTit, cClrWBt, cClrBtA, cClrBtI, cClrBtD, cClrBtP, ;
  233.          cClrTxt, cClrStA, cClrStI, cClrStP, cClrGet, cClrCkI, cClrCkA, ;
  234.          cClrCkP, cClrLbIS, cClrLbR, cClrLbH, cClrLbI, cClrBtB, cClrBtN, ;
  235.          cClrCkN, cClrStN
  236.   cClrDlg = "n/w"                       && Default color of text for dialog
  237.   cClrTit = "w+/w"                      && Color of dialog title
  238.   cClrWBt = "g+/w"                      && Color of dialog window close button
  239.   cClrBtA = "w+/g"                      && Color of active button
  240.   cClrBtI = "n/g"                       && Color of inactive button
  241.   cClrBtD = "bg+/g"                     && Color of default button
  242.   cClrBtP = "gr+/g"                     && Color of button pick character
  243.   cClrBtB = "g/w"                       && Color of combo drop icon border
  244.   cClrBtN = "n+/g"                      && Color of dimmed button
  245.   cClrTxt = "n/w"                       && Color of plain text
  246.   cClrStA = "w+/w"                      && Color of active static text label
  247.   cClrStI = "n/w"                       && Color of inactive text label
  248.   cClrStP = "gr+/w"                     && Color of pick char for text label
  249.   cClrStN = "n+/w"                      && Color of dimmed text label
  250.   cClrGet = "w+/b"                      && Color of get field
  251.   cClrCkI = "n/gb"                      && Color of inactive check boxes
  252.   cClrCkA = "w+/gb"                     && Color of active check boxes
  253.   cClrCkN = "n+/gb"                     && Color of dimmed check box
  254.   cClrCkP = "gr+/gb"                    && Color of pick char of check box
  255.   cClrLbIS = "gr+/gb"                   && Color of inactive list box selection
  256.   cClrLbR = "n/gb"                      && Color of inactive rows in list box
  257.   cClrLbH = "w+/g"                      && Color of list box highlight
  258.   cClrLbI = "w/gb"                      && Color of list box message
  259.  
  260.   PUBLIC mClrDlg, mClrTit,  mClrWBt, mClrBtA, mClrBtI, mClrBtD, mClrBtP, ;
  261.          mClrTxt, mClrStA,  mClrStI, mClrStP, mClrGet, mClrCkI, mClrCkA, ;
  262.          mClrCkP, mClrLbIS, mClrLbR, mClrLbH, mClrLbI, mClrBtB, mClrBtN, ;
  263.          mClrCkN, mClrStN
  264.   mClrDlg = "n/w"                       && Default color of text for dialog
  265.   mClrTit = "w+/w"                      && Color of dialog title
  266.   mClrWBt = "g+/w"                      && Color of dialog window close button
  267.   mClrBtA = "w+/g"                      && Color of active button
  268.   mClrBtI = "n/g"                       && Color of inactive button
  269.   mClrBtD = "bg+/g"                     && Color of default button
  270.   mClrBtP = "gr+/g"                     && Color of button pick character
  271.   mClrBtB = "g/w"                       && Color of combo drop icon border
  272.   mClrBtN = "n+/g"                      && Color of dimmed button
  273.   mClrTxt = "n/w"                       && Color of plain text
  274.   mClrStA = "w+/w"                      && Color of active static text label
  275.   mClrStI = "n/w"                       && Color of inactive text label
  276.   mClrStP = "gr+/w"                     && Color of pick char for text label
  277.   mClrStN = "n+/w"                      && Color of dimmed text label
  278.   mClrGet = "w+/b"                      && Color of get field
  279.   mClrCkI = "n/gb"                      && Color of inactive check boxes
  280.   mClrCkA = "w+/gb"                     && Color of active check boxes
  281.   mClrCkN = "n+/gb"                     && Color of dimmed check box
  282.   mClrCkP = "gr+/gb"                    && Color of pick char of check box
  283.   mClrLbIS = "gr+/gb"                   && Color of inactive list box selection
  284.   mClrLbR = "n/gb"                      && Color of inactive rows in list box
  285.   mClrLbH = "w+/g"                      && Color of list box highlight
  286.   mClrLbI = "w/gb"                      && Color of list box message
  287.  
  288.   *--------------------------------------------------------------------------
  289.   *-- Define "global" constants.  This will be a great #include later on
  290.   *--------------------------------------------------------------------------
  291.   PUBLIC  WM_CREATE, WM_DESTROY, WM_ACTIVAT, WM_PAINT, WM_CLOSE, WM_NEXTDLGC
  292.   WM_CREATE   = 1
  293.   WM_DESTROY  = 2
  294.   WM_ACTIVAT  = 6
  295.   WM_PAINT    = 15                      && Notification to repaint client area
  296.   WM_CLOSE    = 16                      && Note that user selected close button
  297.   WM_NEXTDLGC = 40                      && Moves input focus to next control
  298.                                         && in dialog box
  299.                                         && wparam         lparam
  300.                                         &&  id              .T.   move focus
  301.                                         &&  .F.             .F.   next control
  302.                                         &&  .T.             .F.   prev control
  303.  
  304.   PUBLIC  SE_SHADOW
  305.   SE_SHADOW   = -100
  306.   PUBLIC  WM_DRAWITEM, WM_DELETEIT, WM_INITDIAL, WM_COMMAND, WM_SYSCOMM, SC_CLOSE
  307.   WM_DRAWITEM = 43                      && Notification to the owner of an
  308.                                         && owner drawn button, list..., that
  309.                                         && the item has changed.
  310.   WM_DELETEIT = 45                      && Note to parent of combo/list that
  311.                                         && item was removed.
  312.   WM_INITDIAL = 272                     && Note that dialog is going to display
  313.   WM_COMMAND  = 273                     && Notification that the user has
  314.                                         && selected a menu item, control,
  315.                                         && or accelerator key
  316.   WM_SYSCOMM  = 274
  317.   SC_CLOSE    = 61536
  318.  
  319.   PUBLIC  WM_LBDOWN, WM_LBUP, WM_CUT, WM_COPY, WM_PASTE, WM_CLEAR, WM_UNDO
  320.   WM_LBDOWN   = 513
  321.   WM_LBUP     = 514
  322.   WM_CUT      = 768
  323.   WM_COPY     = 769
  324.   WM_PASTE    = 770
  325.   WM_CLEAR    = 771
  326.   WM_UNDO     = 772
  327.  
  328.   *-- Dialog box default buttons to exit dialog
  329.   PUBLIC  DLN_OK, DLN_CANCEL, DLN_HELP
  330.   DLN_OK       = -500
  331.   DLN_CANCEL   = -501
  332.   DLN_HELP     = -502
  333.  
  334.   *-- Button Control Messages
  335.   PUBLIC  BM_GETCHECK, BM_SETCHECK, BM_GETSTATE, BM_SETSTATE, BM_SETSTYLE
  336.   BM_GETCHECK = 0
  337.   BM_SETCHECK = 1
  338.   BM_GETSTATE = 2
  339.   BM_SETSTATE = 3
  340.   BM_SETSTYLE = 4
  341.  
  342.   *-- Button Control Styles (low word)
  343.   PUBLIC  BS_PUSHBUTT, BS_DEFPUSHB, BS_CHECKBOX, BS_AUTOCHEC, BS_RADIOBUT
  344.   PUBLIC  BS_3STATE, BS_AUTO3STA, BS_GROUPBOX, BS_USERBUTT, BS_AUTORADI
  345.   PUBLIC  BS_OWNERDRA, BS_LEFTTEXT
  346.   BS_PUSHBUTT = 0
  347.   BS_DEFPUSHB = 1
  348.   BS_CHECKBOX = 2
  349.   BS_AUTOCHEC = 3
  350.   BS_RADIOBUT = 4
  351.   BS_3STATE   = 5
  352.   BS_AUTO3STA = 6
  353.   BS_GROUPBOX = 7
  354.   BS_USERBUTT = 8
  355.   BS_AUTORADI = 9
  356.   BS_OWNERDRA = 12
  357.   BS_LEFTTEXT = 32
  358.  
  359.   *-- User Button Notification Codes
  360.   PUBLIC  BN_CLICKED, BN_PAINT, BN_HILITE, BN_UNHILITE, BN_DISABLE, ;
  361.          BN_DOUBLECL, BN_DEFAULT, BN_COLOR
  362.   PUBLIC BN_PRESSED
  363.   BN_CLICKED  = 0
  364.   BN_PAINT    = 1
  365.   BN_HILITE   = 2
  366.   BN_UNHILITE = 3
  367.   BN_DISABLE  = 4
  368.   BN_DOUBLECL = 5
  369.   BN_DEFAULT  = 6
  370.   BN_PRESSED  = 7
  371.   BN_COLOR    = 8
  372.  
  373.   *-- Combo Box Notification Codes
  374.   PUBLIC  CBN_ERRSPAC, CBN_SELCHAN, CBN_DBLCLK, CBN_SETFOCU, CBN_KILLFOC, ;
  375.          CBN_EDITCHA, CBN_EDITUPD, CBN_DROPDOW, CBN_INLIST
  376.   CBN_ERRSPAC = (-1)
  377.   CBN_SELCHAN = 1
  378.   CBN_DBLCLK  = 2
  379.   CBN_SETFOCU = 3
  380.   CBN_KILLFOC = 4
  381.   CBN_EDITCHA = 5
  382.   CBN_EDITUPD = 6
  383.   CBN_DROPDOW = 7
  384.   CBN_INLIST  = 8
  385.  
  386.   *-- Combo Box styles (low words)
  387.   PUBLIC  CBS_SIMPLE, CBS_DROPD, CBS_DROPDL
  388.   CBS_SIMPLE  = 1
  389.   CBS_DROPD   = 2
  390.   CBS_DROPDL  = 3
  391.  
  392.   *-- Combo Box messages
  393.   PUBLIC  CB_GETEDIT, CB_LIMITTE, CB_SETEDIT, CB_ADDSTRI, CB_DELETES, CB_DIR, ;
  394.    CB_GETCOUN, CB_GETCURS, CB_GETLBT, CB_GETLBTL, CB_INSERTS , ;
  395.    CB_RESETCO, CB_FINDSTR, CB_SELECTS, CB_SETCURS, CB_SHOWDRO, ;
  396.    CB_GETITDA, CB_SETITDA, CB_GETDRCR, CB_SETITHE, CB_GETEXTE, ;
  397.    CB_GETDRST, CB_FINDSTR, CB_HIDELST
  398.   CB_GETEDIT  = 0
  399.   CB_LIMITTE  = 1
  400.   CB_SETEDIT  = 2
  401.   CB_ADDSTRI  = 3
  402.   CB_DELETES  = 4
  403.   CB_DIR      = 5
  404.   CB_GETCOUN  = 6
  405.   CB_GETCURS  = 7
  406.   CB_GETLBT   = 8
  407.   CB_GETLBTL  = 9
  408.   CB_INSERTS  = 10
  409.   CB_RESETCO  = 11
  410.   CB_FINDSTR  = 12
  411.   CB_SELECTS  = 13
  412.   CB_SETCURS  = 14
  413.   CB_SHOWDRO  = 15
  414.   CB_GETITDA  = 16
  415.   CB_SETITDA  = 17
  416.   CB_GETDRCR  = 18
  417.   CB_SETITHE  = 19
  418.   CB_GETEXTE  = 22
  419.   CB_GETDRST  = 23
  420.   CB_FINDSTR  = 24
  421.   CB_HIDELST  = 25
  422.  
  423.   *-- Dialog box messages
  424.   PUBLIC  DM_GETDID, DM_SETDID
  425.   DM_GETDID   = 0                       && Return ID of default pushbutton
  426.   DM_SETDID   = 1                       && Change ID of default pushbutton
  427.  
  428.   *-- Listbox messages
  429.   PUBLIC  LB_ADDSTRI, LB_INSERTS, LB_DELETES, LB_RESETCO, LB_SETSEL, LB_SETCURS, ;
  430.    LB_GETSEL, LB_GETCURS, LB_GETTEXT, LB_GETTEXT, LB_GETCOUN, LB_SELECTS, ;
  431.    LB_DIR, LB_GETTOPI, LB_FINDSTR, LB_GETSELC, LB_GETSELI, LB_SETTABS, ;
  432.    LB_GETHORI, LB_SETHORI, LB_SETTOPI, LB_GETITRE, LB_GETITDA, LB_SETITDA, ;
  433.    LB_SELITRA, LB_SETCARE, LB_GETCARE, LB_SETITHE, LB_GETITHE, LB_FINDSTR
  434.  
  435.   LB_ADDSTRI  = 1
  436.   LB_INSERTS  = 2
  437.   LB_DELETES  = 3
  438.   LB_RESETCO  = 5
  439.   LB_SETSEL   = 6
  440.   LB_SETCURS  = 7
  441.   LB_GETSEL   = 8
  442.   LB_GETCURS  = 9
  443.   LB_GETTEXT  = 10
  444.   LB_GETTEXT  = 11
  445.   LB_GETCOUN  = 12
  446.   LB_SELECTS  = 13
  447.   LB_DIR      = 14
  448.   LB_GETTOPI  = 15
  449.   LB_FINDSTR  = 16
  450.   LB_GETSELC  = 17
  451.   LB_GETSELI  = 18
  452.   LB_SETTABS  = 19
  453.   LB_GETHORI  = 20
  454.   LB_SETHORI  = 21
  455.   LB_SETTOPI  = 24
  456.   LB_GETITRE  = 25
  457.   LB_GETITDA  = 26
  458.   LB_SETITDA  = 27
  459.   LB_SELITRA  = 28
  460.   LB_SETCARE  = 31
  461.   LB_GETCARE  = 32
  462.   LB_SETITHE  = 33
  463.   LB_GETITHE  = 34
  464.   LB_FINDSTR  = 35
  465.  
  466.   *-- Listbox Notification Codes
  467.   PUBLIC  LBN_ERRSPA, LBN_SELCHA, LBN_DBLCLK, LBN_SELCAN, LBN_SETFOC, LBN_KILLFO
  468.   LBN_ERRSPA  =  (-2)
  469.   LBN_SELCHA  =  1
  470.   LBN_DBLCLK  =  2
  471.   LBN_SELCAN  =  3
  472.   LBN_SETFOC  =  4
  473.   LBN_KILLFO  =  5
  474.  
  475.   *-- Edit Control Messages
  476.   PUBLIC  EM_GETSEL, EM_SETSEL, EM_GETRE, EM_SETRE, EM_SETRENP, EM_GETMODI
  477.   PUBLIC  EM_SETMODI, EM_SETHAND, EM_GETHAND, EM_LINELEN, EM_REPLACE, EM_GETLINE
  478.   PUBLIC  EM_CANUNDO, EM_UNDO, EM_EMPTYUN, EM_SETREAD
  479.   EM_GETSEL   = 0
  480.   EM_SETSEL   = 1
  481.   EM_GETRE    = 2
  482.   EM_SETRE    = 3
  483.   EM_SETRENP  = 4
  484.   EM_GETMODI  = 8
  485.   EM_SETMODI  = 9
  486.   EM_SETHAND  = 12
  487.   EM_GETHAND  = 13
  488.   EM_LINELEN  = 17
  489.   EM_REPLACE  = 18
  490.   EM_GETLINE  = 20
  491.   EM_CANUNDO  = 22
  492.   EM_UNDO     = 23
  493.   EM_EMPTYUN  = 29
  494.   EM_SETREAD  = 31
  495.  
  496.   *-- Edit Control Notification Codes
  497.   PUBLIC  EN_SETFOCU, EN_KILLFOC, EN_CHANGE, EN_UPDATE, EN_ERRSPAC
  498.   EN_SETFOCU  = 1
  499.   EN_KILLFOC  = 2
  500.   EN_CHANGE   = 3
  501.   EN_UPDATE   = 4
  502.   EN_ERRSPAC  = 5
  503.  
  504.   *-- Common Keyboard from INKEY and LASTKEY functions
  505.   PUBLIC  KB_TAB, KB_ENTER, KB_SPACE, KB_SHIFTTAB, KB_UPARROW, KB_DOWNARROW, ;
  506.          KB_LEFTARROW, KB_RTARROW, KB_F1, KB_ESC, KB_MOUSE, KB_CTRLW
  507.   KB_TAB = 9
  508.   KB_ENTER = 13
  509.   KB_SPACE = 32
  510.   KB_SHIFTTAB = -400
  511.   KB_UPARROW = 5
  512.   KB_DOWNARROW = 24
  513.   KB_LEFTARROW = 19
  514.   KB_RTARROW = 4
  515.   KB_F1 = 28
  516.   KB_ESC = 27
  517.   KB_MOUSE = -100
  518.   KB_CTRLW = 23
  519.  
  520. RETURN
  521. *-- EOP: DefPublic
  522.  
  523.  
  524. FUNCTION OpenFile
  525. PARAMETERS pcDbfDial
  526. *----------------------------------------------------------------------------
  527. * NAME
  528. *   OpenFile() -
  529. *
  530. * DESCRIPTION
  531. *
  532. * PARAMETERS
  533. *   pcDbfDial  =
  534. *
  535. *----------------------------------------------------------------------------
  536.   lOk = .T.
  537.  
  538.   
  539.   IF ALIAS() = pcDbfDial
  540.     IF FILE( pcDbfDial + ".PRG" )
  541.       lh = 0
  542.       lh = FOPEN( pcDbfDial + ".PRG", "r" )
  543.       IF lh > 0
  544.         cLine = FGETS( lh )
  545.         IF FCLOSE( lh )
  546.         ENDIF
  547.         IF LEFT( cLine, 7 ) <> "*-- DBW"
  548.           IF _NodShake( " ;  File already exists, overwrite? " + ;
  549.                           pcDbfDial + ".PRG  ", 9, 15, 2, 50, .T. )
  550.             ERASE ( pcDbfDial + ".PRG" )
  551.           ELSE
  552.             lOk = .F.
  553.             DO _Err_Box WITH "Code generation cancelled"
  554.           ENDIF
  555.         ELSE
  556.           ERASE ( pcDbfDial + ".PRG" )
  557.         ENDIF
  558.       ELSE
  559.         lOk = .F.
  560.         DO _Err_Box WITH [File in use by another: ] + pcDbfDial + ".PRG"
  561.       ENDIF
  562.     ENDIF
  563.  
  564.     IF lOk
  565.       SET CONSOLE OFF
  566.       SET ALTERNATE TO ( pcDbfDial + ".PRG" )
  567.       _pcolno = 0
  568.       SET ALTERNATE ON
  569.       ?? '*-- DBW - Dialog Box Workshop -' AT 0, pcDbfDial + ".PRG"
  570.       ?
  571.  
  572.     ENDIF
  573.  
  574.   ELSE
  575.     DO _Err_Box WITH [Dialog DBF file does not exist]
  576.     lOk = .F.
  577.   ENDIF
  578.  
  579. RETURN lOk
  580. *-- EOF: OpenFile( pcDbfDial )
  581.  
  582.  
  583. PROCEDURE ClsFile
  584. *----------------------------------------------------------------------------
  585. * NAME
  586. *   ClsFile -
  587. *
  588. * DESCRIPTION
  589. *
  590. *----------------------------------------------------------------------------
  591.   SET ALTERNATE OFF
  592.   SET ALTERNATE TO
  593.   CLOSE DATABASE
  594.  
  595.   RELEASE cClrDlg, cClrTit, cClrWBt, cClrBtA, cClrBtI, cClrBtD, cClrBtP, ;
  596.          cClrTxt, cClrStA, cClrStI, cClrStP, cClrGet, cClrCkI, cClrCkA, ;
  597.          cClrCkP, cClrLbIS, cClrLbR, cClrLbH, cClrLbI, cClrBtB, cClrBtN, ;
  598.          cClrCkN, cClrStN
  599.   RELEASE WM_CREATE, WM_DESTROY, WM_ACTIVAT, WM_PAINT, WM_CLOSE, WM_NEXTDLGC
  600.   RELEASE SE_SHADOW
  601.   RELEASE WM_DRAWITEM, WM_DELETEIT, WM_INITDIAL, WM_COMMAND, WM_SYSCOMM, SC_CLOSE
  602.   RELEASE WM_LBDOWN, WM_LBUP, WM_CUT, WM_COPY, WM_PASTE, WM_CLEAR, WM_UNDO
  603.   RELEASE DLN_OK, DLN_CANCEL, DLN_HELP
  604.   RELEASE  BM_GETCHECK, BM_SETCHECK, BM_GETSTATE, BM_SETSTATE, BM_SETSTYLE
  605.   RELEASE  BS_PUSHBUTT, BS_DEFPUSHB, BS_CHECKBOX, BS_AUTOCHEC, BS_RADIOBUT
  606.   RELEASE  BS_3STATE, BS_AUTO3STA, BS_GROUPBOX, BS_USERBUTT, BS_AUTORADI
  607.   RELEASE  BS_OWNERDRA, BS_LEFTTEXT
  608.   RELEASE  BN_CLICKED, BN_PAINT, BN_HILITE, BN_UNHILITE, BN_DISABLE, ;
  609.          BN_DOUBLECL, BN_DEFAULT, BN_COLOR
  610.   RELEASE BN_PRESSED
  611.   RELEASE  CBN_ERRSPAC, CBN_SELCHAN, CBN_DBLCLK, CBN_SETFOCU, CBN_KILLFOC, ;
  612.          CBN_EDITCHA, CBN_EDITUPD, CBN_DROPDOW, CBN_INLIST
  613.   RELEASE  CBS_SIMPLE, CBS_DROPD, CBS_DROPDL
  614.   RELEASE  CB_GETEDIT, CB_LIMITTE, CB_SETEDIT, CB_ADDSTRI, CB_DELETES, CB_DIR, ;
  615.    CB_GETCOUN, CB_GETCURS, CB_GETLBT, CB_GETLBTL, CB_INSERTS , ;
  616.    CB_RESETCO, CB_FINDSTR, CB_SELECTS, CB_SETCURS, CB_SHOWDRO, ;
  617.    CB_GETITDA, CB_SETITDA, CB_GETDRCR, CB_SETITHE, CB_GETEXTE, ;
  618.    CB_GETDRST, CB_FINDSTR, CB_HIDELST
  619.   RELEASE  DM_GETDID, DM_SETDID
  620.   RELEASE  LB_ADDSTRI, LB_INSERTS, LB_DELETES, LB_RESETCO, LB_SETSEL, LB_SETCURS, ;
  621.    LB_GETSEL, LB_GETCURS, LB_GETTEXT, LB_GETTEXT, LB_GETCOUN, LB_SELECTS, ;
  622.    LB_DIR, LB_GETTOPI, LB_FINDSTR, LB_GETSELC, LB_GETSELI, LB_SETTABS, ;
  623.    LB_GETHORI, LB_SETHORI, LB_SETTOPI, LB_GETITRE, LB_GETITDA, LB_SETITDA, ;
  624.    LB_SELITRA, LB_SETCARE, LB_GETCARE, LB_SETITHE, LB_GETITHE, LB_FINDSTR
  625.   RELEASE  LBN_ERRSPA, LBN_SELCHA, LBN_DBLCLK, LBN_SELCAN, LBN_SETFOC, LBN_KILLFO
  626.   RELEASE  EM_GETSEL, EM_SETSEL, EM_GETRE, EM_SETRE, EM_SETRENP, EM_GETMODI
  627.   RELEASE  EM_SETMODI, EM_SETHAND, EM_GETHAND, EM_LINELEN, EM_REPLACE, EM_GETLINE
  628.   RELEASE  EM_CANUNDO, EM_UNDO, EM_EMPTYUN, EM_SETREAD
  629.   RELEASE  EN_SETFOCU, EN_KILLFOC, EN_CHANGE, EN_UPDATE, EN_ERRSPAC
  630.   RELEASE  KB_TAB, KB_ENTER, KB_SPACE, KB_SHIFTTAB, KB_UPARROW, KB_DOWNARROW, ;
  631.          KB_LEFTARROW, KB_RTARROW, KB_F1, KB_ESC, KB_MOUSE, KB_CTRLW
  632. RETURN
  633. *-- EOP: ClsFile
  634.  
  635.  
  636. PROCEDURE GenStart
  637. *----------------------------------------------------------------------------
  638. * NAME
  639. *   GenStart - Generate startup code for the dialog
  640. *
  641. * DESCRIPTION
  642. *
  643. *----------------------------------------------------------------------------
  644.   _pcolno = 0
  645.   ?? "PROCEDURE " + pcDbfDial
  646.   TEXT
  647. *----------------------------------------------------------------------------
  648. * NAME
  649. * DESCRIPTION
  650. *----------------------------------------------------------------------------
  651.   PRIVATE  cAlias, cWindow, lTalk, lSafety, cDialog, cHelpFile, cStartLib
  652.  
  653.   IF SET( "TALK" ) = "ON"
  654.     SET TALK OFF
  655.     lTalk = .T.
  656.   ELSE
  657.     lTalk = .F.
  658.   ENDIF
  659.  
  660.   lSafety = SET( "SAFETY" ) = "ON"
  661.   SET SAFETY OFF
  662.  
  663.   cWindow = WINDOW()
  664.   cAlias = ALIAS()
  665.  
  666.   *----------------------------------
  667.   *-- Setup the help system variables
  668.   *----------------------------------
  669.   lError = .F.
  670. ENDTEXT
  671.  
  672.   *-----------------------------------
  673.   *-- Generate the help file reference
  674.   *-----------------------------------
  675.   IF TYPE( "DBW_HELP" ) = "C" .AND. .NOT. ISBLANK( DBW_HELP )
  676. ? '  cHelpFile = "' + UPPER( TRIM( DBW_HELP ) ) + '"'
  677.   ELSE
  678. ? '  cHelpFile = "' + UPPER( TRIM( pcDbfDial ) ) + '"'
  679.   ENDIF
  680.  
  681. ? '  cDialog = "' + UPPER( TRIM( pcDbfDial ) ) + '"'
  682.  
  683.   cDir = UPPER( GETENV( "MTGROUP" ) )
  684.   IF cDir = "CCPPMFFU"
  685.     cLibName = "MFFULIB"
  686.   ELSE
  687.     cLibName = "DBBLIB"
  688.   ENDIF
  689.  
  690. ? '  cDBBLib = "' + cLibName + '"'
  691.  
  692. TEXT
  693.  
  694.   *----------------------------------------------
  695.   *-- Setup the link to the DBB Procedure Library
  696.   *----------------------------------------------
  697.   ON ERROR lError = .T.
  698.   cStartLib = SET( "PROCEDURE" )
  699.   SET PROCEDURE TO ( cDBBLib )
  700.   IF lError
  701.     lError = .F.
  702.     SET PROCEDURE TO HOME() + cDBBLib
  703.     IF lError
  704.       *-- Display the error message in a windowed box
  705.       PRIVATE lc_anykey, lc_msg, lc_msglen, lc_win, ln_press, ln_width, ll_trap,;
  706.               ll_escape
  707.  
  708.       lc_anykey = [Press any key to continue...]
  709.       ln_press  = LEN( lc_anykey )
  710.       lc_msg    = [Could not locate procedure file: ] + cDBBLib
  711.       ln_msglen = LEN( lc_msg )
  712.       ln_width = 0
  713.       ll_escape = SET("ESCAPE") = "ON"
  714.       SET ESCAPE OFF
  715.  
  716.       *-- Determine the width needed for the window:
  717.       IF ln_msglen <= ln_press
  718.         ln_width = ln_press
  719.       ELSE
  720.         *-- Make sure the message fits in the window:
  721.         IF ln_msglen > 76
  722.           lc_msg = LEFT( lc_msg, 76 )
  723.           ln_msglen = 76
  724.         ENDIF
  725.         ln_width = ln_msglen
  726.       ENDIF
  727.       DEFINE WINDOW _err_box FROM 9, ((76 - ln_width) + .5) / 2 ;
  728.                     TO 15, (ln_width + 83) / 2 DOUBLE
  729.       ln_width = ( ln_width + 2 )
  730.  
  731.       *-- Display the message and prompt to the window and wait for a key press
  732.       ACTIVATE WINDOW _err_box
  733.       ? lc_msg AT ( ln_width - ln_msglen ) / 2
  734.       ?
  735.       ? lc_anykey AT ( ln_width - ln_press ) / 2
  736.       SET CONSOLE OFF
  737.       WAIT
  738.       SET CONSOLE ON
  739.  
  740.       *-- Clean up the window display and reactivate the previous window
  741.       RELEASE WINDOW _err_box
  742.  
  743.       IF ll_escape
  744.         SET ESCAPE ON
  745.       ELSE
  746.         SET ESCAPE OFF
  747.       ENDIF
  748.  
  749.     ENDIF
  750.   ENDIF
  751.   ON ERROR
  752.  
  753.   *---------------------------------
  754.   *-- Run the actual dialog box code
  755.   *---------------------------------
  756.   IF .NOT. lError
  757.     DO Dialog
  758.   ENDIF
  759.  
  760.   *----------------------------------
  761.   *-- Restore the startup environment
  762.   *----------------------------------
  763.   IF .NOT. ISBLANK( cStartLib )
  764.     SET PROCEDURE TO ( cStartLib )
  765.   ENDIF
  766.  
  767.   IF .NOT. ISBLANK( cAlias ) .AND. SELECT( cAlias ) > 0
  768.     SELECT ( cAlias )
  769.   ENDIF
  770.  
  771.   IF lSafety
  772.     SET SAFETY ON
  773.   ENDIF
  774.   IF lTalk
  775.     SET TALK ON
  776.   ENDIF
  777.   IF .NOT. ISBLANK( cWindow )
  778.     ACTIVATE WINDOW &cWindow
  779.   ENDIF
  780. RETURN
  781.   ENDTEXT
  782.   ? "*-- EOP: " + pcDbfDial
  783.   ?
  784.   ?
  785.  
  786. RETURN
  787. *-- EOP: GenStart
  788.  
  789.  
  790. PROCEDURE GenDialS
  791. *----------------------------------------------------------------------------
  792. * NAME
  793. *   GenDialS - Generate dialog box setup code.
  794. *
  795. * DESCRIPTION
  796. *
  797. *----------------------------------------------------------------------------
  798.   TEXT
  799. PROCEDURE Dialog
  800. *----------------------------------------------------------------------------
  801. * NAME
  802. *   Dialog -
  803. *
  804. * DESCRIPTION
  805. *
  806. *----------------------------------------------------------------------------
  807.  
  808.   *---------------------------------------
  809.   *-- Temporary for now, message varaibles
  810.   *---------------------------------------
  811.   DLN_OK       = -500
  812.   DLN_CANCEL   = -501
  813.   DLN_HELP     = -502
  814.  
  815.   WM_PAINT    = 15                      && Notification to repaint client area
  816.   WM_CLOSE    = 16                      && Note that user selected close button
  817.   WM_DRAWITEM = 43                      && Notification to the owner of an
  818.  
  819.   BN_CLICKED  = 0
  820.   BN_PAINT    = 1
  821.   BN_HILITE   = 2
  822.   BN_UNHILITE = 3
  823.   BN_DISABLE  = 4
  824.   BN_DEFAULT  = 6
  825.   BN_PRESSED  = 7
  826.   BN_COLOR    = 8
  827.   SE_SHADOW   = -100
  828.  
  829.   EN_SETFOCU  = 1
  830.   EN_KILLFOC  = 2
  831.  
  832.   CB_SELECTS  = 13
  833.   CB_SHOWDRO  = 15
  834.   CB_HIDELST  = 25
  835.  
  836.   CBN_SELCHAN = 1
  837.   CBN_DBLCLK  = 2
  838.   CBN_SETFOCU = 3
  839.   CBN_KILLFOC = 4
  840.   CBN_EDITCHA = 5
  841.   CBN_EDITUPD = 6
  842.   CBN_DROPDOW = 7
  843.   CBN_INLIST  = 8
  844.  
  845.   LBN_SELCHA  =  1
  846.   LBN_DBLCLK  =  2
  847.   LBN_SELCAN  =  3
  848.   LBN_SETFOC  =  4
  849.   LBN_KILLFO  =  5
  850.  
  851.   KB_TAB = 9
  852.   KB_ENTER = 13
  853.   KB_SPACE = 32
  854.   KB_SHIFTTAB = -400
  855.   KB_UPARROW = 5
  856.   KB_DOWNARROW = 24
  857.   KB_LEFTARROW = 19
  858.   KB_RTARROW = 4
  859.   KB_F1 = 28
  860.   KB_ESC = 27
  861.   KB_MOUSE = -100
  862.   KB_CTRLW = 23
  863.  
  864.   *--------------------
  865.   *-- Working variables
  866.   *--------------------
  867.   PRIVATE nCurrent, nCurrGrp, lButtAct, nMRow, nMCol, nMsEvent, nDlgDef, nAccel
  868.   PRIVATE n1stGrp, nCancelBt
  869.   nCurrent  = 0                         && Current dialog object id
  870.   nCurrGrp  = 0                         && Current group id for object id
  871.   lButtAct  = .F.                       && Dialog has a button active
  872.   nMRow     = -1
  873.   nMCol     = -1
  874.   nMsEvent  = 0
  875.   nDlgDef   = 0
  876.   nAccel    = 0
  877.   n1stGrp   = 0
  878.   nCancelBt = 0                         && Id for cancel button
  879.  
  880.   PRIVATE nDefButt, nMess
  881.   nDefButt  = 0                         && Number of object with default button
  882.   nMess     = 0
  883.  
  884.   PRIVATE cOldFClr, cOldBClr, cOldHClr, cOldMClr, cOldNClr, cOldTClr
  885.   cOldFClr = _ColorChk( "F" )
  886.   cOldBClr = _ColorChk( "B" )
  887.   cOldHClr = _ColorChk( "H" )
  888.   cOldMClr = _ColorChk( "M" )
  889.   cOldNClr = _ColorChk( "N" )
  890.   cOldTClr = _ColorChk( "T" )
  891.   ENDTEXT
  892.  
  893.   ?
  894.   ? "  SET COLOR OF FIELDS TO " + cClrGet
  895.   ? "  SET COLOR OF BOX TO " + cClrLbR
  896.   ? "  SET COLOR OF HIGH TO " + cClrLbH
  897.   ? "  SET COLOR OF MESS TO " + cClrLbR
  898.   ? "  SET COLOR OF TITLE TO " + cClrLbR
  899.  
  900. TEXT
  901.  
  902.   *------------------------
  903.   *-- Close Icon for window
  904.   *------------------------
  905.   PRIVATE nRowCls, nOrigRow, nOrigCol, nXoffset, nYOffset, nCol, ;
  906.           nHigh, nWidth, nLColCls, nRColCls, nRWinCol, cField, cClass, nScreen
  907.   cField = ""
  908.   cClass = ""
  909.  
  910. ENDTEXT
  911.   SET FILTER TO
  912.   SET ORDER TO
  913.   GO TOP
  914.   ? '  nRowCls   =', TSTR( row )
  915.   ? '  nOrigRow  =', TSTR( row )
  916.   ? '  nOrigCol  =', TSTR( col )
  917.   ? '  nXOffset  = 0'
  918.   ? '  nYOffset  = 0'
  919.   ? '  nCol      =', TSTR( col  )
  920.   nCol = col
  921.   ? '  nHigh     =', TSTR( decimals )
  922.   ? '  nWidth    =', TSTR( length )
  923.   nWidth = length
  924.   ? '  nLColCls  =', TSTR( ncol + 2 )
  925.   ? '  nRColCls  =', TSTR( ncol + 4 )
  926.   ? '  nRWinCol  =', TSTR( ncol + nWidth - 1 )
  927.  
  928. TEXT
  929.   nScreen = IIF( "50" $ SET("DISPLAY"), 49, ;
  930.                 IIF( "43" $ SET("DISPLAY"), 42, 24 ) )
  931.   IF SET( "STATUS" ) = "ON"
  932.     nScreen = nScreen - 3
  933.   ENDIF
  934.  
  935.   PRIVATE nClkBox, nClkObj, aClkBox, aClkObj, aObjPoint
  936.   *--------------------------------------------------
  937.   *-- Get the number of clickable boxes in the dialog
  938.   *--------------------------------------------------
  939. ENDTEXT
  940.  
  941.   COUNT FOR value_type = "B" .AND. LEFT( fieldname, 3 ) $ "CS_,LB_,UD_" ;
  942.     TO nClkBox
  943. ? '  nClkBox =', TSTR( nClkBox )
  944.   IF nClkBox > 0
  945.     ? "  DECLARE aClkBox[", LTRIM( STR( nClkBox ) ), ", 6 ]"
  946.     i = 1
  947.     SCAN FOR value_type = "B" .AND. LEFT( fieldname, 3 ) $ "CS_,LB_,UD_"
  948.       ? "  aClkBox[", LTRIM( STR( i ) ), ", 1 ] =", TSTR( row ), ;
  949.         " " AT 38,"&"+"& " + fieldname
  950.  
  951.       ? "  aClkBox[", LTRIM( STR( i ) ), ", 2 ] =", TSTR( decimals )
  952.       ? "  aClkBox[", LTRIM( STR( i ) ), ", 3 ] =", TSTR( col )
  953.       ? "  aClkBox[", LTRIM( STR( i ) ), ", 4 ] =", TSTR( length )
  954.       ? "  aClkBox[", LTRIM( STR( i ) ), ", 5 ] =", TSTR( RECNO() )
  955.       ? "  aClkBox[", LTRIM( STR( i ) ), ", 6 ] = .F."
  956.       ?? '&'+'& Clink in the box flag' AT 41
  957.       i = i + 1
  958.     ENDSCAN
  959.   ENDIF
  960.  
  961.   TEXT
  962.  
  963.   *--------------------------------------------------
  964.   *-- Get the number of clickable items in the dialog
  965.   *--------------------------------------------------
  966.   ENDTEXT
  967.  
  968.   COUNT FOR currentid > 0 ;
  969.     TO nClkObj
  970. ? '  nClkObj =', TSTR( nClkObj )
  971.   IF nClkObj > 0
  972.     SET ORDER TO ObjOrder
  973.     ? "  DECLARE aClkObj[", LTRIM( STR( nClkObj ) ), ", 13 ]"
  974.  
  975.     i = 1
  976.     SCAN FOR currentid > 0
  977.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 1 ] =", TSTR( row ) , ;
  978.         " " AT 38, "&"+"& Row"
  979.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 2 ] =", TSTR( col ), ;
  980.         " " AT 38, "&"+"& Col"
  981.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 3 ] =", TSTR( decimals ), ;
  982.         " " AT 38, "&"+"& Decimals"
  983.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 4 ] =", TSTR( RECNO() ), ;
  984.         " " AT 38, "&"+"& CurrentId"
  985.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 5 ] =", TSTR( groupid ), ;
  986.         " " AT 38, "&"+"& GroupId"
  987.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 6 ] =", TSTR( nextid ), ;
  988.         " " AT 38, "&"+"& NextId"
  989.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 7 ] =", TSTR( previd ), ;
  990.         " " AT 38, "&"+"& PrevId"
  991.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 8 ] =", STR2QT( pickkey ), ;
  992.         " " AT 38, "&"+"& PickKey"
  993.  
  994.       *-------------------------------------------------------
  995.       *-- Get the next and previous object id within the group
  996.       *-------------------------------------------------------
  997.       IF .NOT. LEFT( fieldname, 3 ) $ "RB_,CK_,EF_"
  998.         nPrevGroup = currentid
  999.         nNextGroup = currentid
  1000.       ELSE
  1001.         nSaveRec = RECNO()
  1002.         nThisGroup = groupid
  1003.  
  1004.         SET FILTER TO groupid = nThisGroup .AND. ;
  1005.                       RIGHT( TRIM( fieldname ), 2 ) <> "_0"
  1006.         SKIP
  1007.         IF .NOT. EOF()
  1008.           nNextGroup = currentid
  1009.         ELSE
  1010.           GO TOP
  1011.           nNextGroup = currentid
  1012.         ENDIF
  1013.         GOTO nSaveRec
  1014.         SKIP - 1
  1015.         IF .NOT. BOF()
  1016.           nPrevGroup = currentid
  1017.         ELSE
  1018.           GO BOTTOM
  1019.           nPrevGroup = currentid
  1020.         ENDIF
  1021.         GOTO nSaveRec
  1022.         SET FILTER TO
  1023.       ENDIF
  1024.  
  1025.       ? "  aClkObj[", LTRIM( STR( i ) ), ", 9 ] =", TSTR( nPrevGroup ), ;
  1026.         " " AT 38, "&"+"& Previous item in group"
  1027.       ? "  aClkObj[", LTRIM( STR( i ) ), ",10 ] =", TSTR( nNextGroup ), ;
  1028.         " " AT 38, "&"+"& Next item in group"
  1029.       ? '  aClkObj[', LTRIM( STR( i ) ), ',11 ] = "' + TRIM( fieldname ) + '"'
  1030.       ??  "&"+"& " + TRIM(Template) AT 41
  1031.       ? '  aClkObj[', LTRIM( STR( i ) ), ',12 ] = [' + TRIM( hlp_msg ) + ']'
  1032.       ? '  aClkObj[', LTRIM( STR( i ) ), ',13 ] = [' + TRIM( rej_msg ) + ']'
  1033.       ?
  1034.  
  1035.       IF TRIM( fieldname ) = 'BT_CANCEL'
  1036.       ? '  nCancelBt =', TSTR( RECNO() )
  1037.       ?
  1038.       ENDIF
  1039.  
  1040.       i = i + 1
  1041.     ENDSCAN
  1042.   ENDIF
  1043.  
  1044. TEXT
  1045.  
  1046.   *-------------------------------------------------------------
  1047.   *-- Setup object pointers in to the current object array above
  1048.   *-------------------------------------------------------------
  1049. ENDTEXT
  1050.  
  1051.   SET ORDER TO ObjOrder
  1052. ? '  DECLARE aObjPoint[', TSTR( RECCOUNT() ), ']'
  1053.   i = 1
  1054.   SCAN FOR currentid > 0
  1055. ? '  aObjPoint[', TSTR( RECNO() ), '] =', TSTR( i )
  1056.     i = i + 1
  1057.   ENDSCAN
  1058.  
  1059.  
  1060. TEXT
  1061.  
  1062.   *-------------------------------------------------------------------
  1063.   *-- Setup private memory variables for object states (from InitObjs)
  1064.   *-- First variable with the object memvar name contains the value
  1065.   *-- for the object.  The second varaible, if present, indicates
  1066.   *-- the id of the object previously active in the group.
  1067.   *-------------------------------------------------------------------
  1068. ENDTEXT
  1069.  
  1070.   SET FILTER TO
  1071.   SCAN FOR currentid > 0
  1072.     cField = TRIM( fieldname )
  1073.  
  1074.     ? "  PRIVATE", LOWER( cField )
  1075.     ? " ", LOWER( fieldname ), ' = ""'
  1076.  
  1077.     cClass = LEFT( cField, 3 )
  1078.     IF cClass $ "CK_,RB_,LB_,UD_,CS_,CL_,CD_" .AND. RIGHT( cField, 2 ) = "_1"
  1079.       cVar = "n" + _Proper( LEFT( cField, RAT( "_", cField ) - 1 ) )
  1080.  
  1081.       ? "  PRIVATE", cvar
  1082.       IF cClass $ "LB_,CS_,CL_,CD_,UD_"
  1083.         ? " ", cvar, "= 0"
  1084.       ELSE
  1085.         ? " ", cvar, "=", TSTR( RECNO() )
  1086.       ENDIF
  1087.     ENDIF
  1088.   ENDSCAN
  1089.  
  1090.  
  1091. TEXT
  1092.  
  1093.   DO InitObjs
  1094.  
  1095.   DO DrawDial                           && Draw all the dialog objects
  1096.  
  1097.   *--------------------------------
  1098.   *-- Set focus to the first object
  1099.   *--------------------------------
  1100.   DO GetNext WITH nCurrent, .T.
  1101.  
  1102.   *-- The message loop
  1103.   nMess = 0
  1104.   DO WHILE .NOT. GetMess()
  1105.     DO Dispatch
  1106.     IF nMess = DLN_OK .OR. nMess = DLN_CANCEL
  1107.       EXIT
  1108.     ENDIF
  1109.  
  1110.   ENDDO
  1111.  
  1112.   IF nMess = DLN_OK
  1113.     DO PostVals
  1114.     FXL_Cancel = .F.
  1115.   ELSE
  1116.     FXL_Cancel = .T.
  1117.   ENDIF
  1118.  
  1119. ENDTEXT
  1120.  
  1121.   ? '  RELEASE WINDOW', pcDbfDial
  1122.   ? '  RESTORE SCREEN FROM', pcDbfDial
  1123.   ? '  RELEASE SCREEN', pcDbfDial
  1124.  
  1125. TEXT
  1126.  
  1127.   DO ReleObjs
  1128.  
  1129.   SET COLOR OF FIELDS TO &cOldFClr
  1130.   SET COLOR OF BOX TO &cOldBClr
  1131.   SET COLOR OF HIGH TO &cOldHClr
  1132.   SET COLOR OF MESS TO &cOldMClr
  1133.   SET COLOR OF TITLE TO &cOldTClr
  1134.   SET CURSOR ON
  1135.  
  1136. RETURN
  1137. *-- EOP: Dialog
  1138.   ENDTEXT
  1139.   ?
  1140.  
  1141. RETURN
  1142. *-- EOP: GenDialS
  1143.  
  1144.  
  1145. PROCEDURE GenInitO
  1146. *----------------------------------------------------------------------------
  1147. * NAME
  1148. *   GenInitO -
  1149. *
  1150. * DESCRIPTION
  1151. *
  1152. *----------------------------------------------------------------------------
  1153.  
  1154. TEXT
  1155. PROCEDURE InitObjs
  1156. *----------------------------------------------------------------------------
  1157. * NAME
  1158. *   InitObjs - Scan the design DBF file and initialize the object variables
  1159. *
  1160. * DESCRIPTION
  1161. *
  1162. *----------------------------------------------------------------------------
  1163.   PRIVATE cField, cClass, cDefault, Value, lInitDef
  1164.  
  1165.   *--------------------------------------------------
  1166.   *-- Determine if an initialization array is present
  1167.   *--------------------------------------------------
  1168. ENDTEXT
  1169.  
  1170.   ? '  lInitDef = TYPE( "' + pcDbfDial +'[1]" ) <> "U"'
  1171.  
  1172.   n = 1                                 && Pointer to init array
  1173.   cN = LTRIM( STR( n, 2 ) )
  1174.  
  1175.   SET ORDER TO ObjOrder
  1176.   SCAN FOR currentid <> 0
  1177.  
  1178.     cField = TRIM( fieldname )
  1179.     cClass = LEFT( cField, 3 )
  1180.     IF cClass $ "CK_,RB_,LB_,UD_,CS_,CL_,CD_" .AND. RIGHT( cField, 2 ) = "_1"
  1181.       cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  1182.     ENDIF
  1183.  
  1184.     IF cClass = "BT_"
  1185.       cDefault = def_val
  1186.       cDefault = UPPER( TRIM( cDefault ) )
  1187.       IF cDefault = '"DEFAULT"'
  1188. TEXT
  1189.  
  1190.   *-------------------------------
  1191.   *-- Set the default button value
  1192.   *-------------------------------
  1193. ENDTEXT
  1194.  
  1195.   ? "  nDlgDef = ", TSTR( RECNO() )
  1196.       nDlgDef = RECNO()
  1197.  
  1198.       ENDIF
  1199.     ENDIF
  1200.  
  1201.     n = n + 1
  1202.     cN = LTRIM( STR( n, 2 ) )
  1203.   ENDSCAN
  1204.  
  1205. TEXT
  1206.  
  1207.   *-----------------------------------------------------------------
  1208.   *-- If the Initialize array is present, then set the object values
  1209.   *-- based on the array.
  1210.   *-----------------------------------------------------------------
  1211. ENDTEXT
  1212.  
  1213.  
  1214.   ? "  IF lInitDef"
  1215.   GO TOP
  1216.  
  1217.   n = 1                                 && Pointer to init array
  1218.   cN = LTRIM( STR( n, 2 ) )
  1219.   SCAN FOR currentid <> 0
  1220.  
  1221.     cField = TRIM( fieldname )
  1222.     cClass = LEFT( cField, 3 )
  1223.     IF cClass $ "CK_,RB_,LB_,UD_,CS_,CL_,CD_" .AND. RIGHT( cField, 2 ) = "_1"
  1224.       cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  1225.     ENDIF
  1226.  
  1227.     IF cClass = "RB_"                   && For a radio button group
  1228.  
  1229.   ? "    IF", pcDbfDial + "[ " + TSTR( n ) +" ]", ;
  1230.     " " AT 38, "&"+"& If this button is active"
  1231.   ? "     ", cVar, "=", TSTR( RECNO() ), ;
  1232.     " " AT 38, "&"+"& Set the tab into value to this button"
  1233.   ? "    ENDIF"
  1234.  
  1235.     ENDIF
  1236.  
  1237.   ? "   ", cField, "=",  pcDbfDial + "[ " + TSTR( n ) + " ]"
  1238.  
  1239.     IF cClass = "LB_"
  1240.   ? "   ", cVar, "=", cField
  1241.     ENDIF
  1242.  
  1243.  
  1244.     n = n + 1
  1245.     cN = LTRIM( STR( n, 2 ) )
  1246.   ENDSCAN
  1247.  
  1248.   ? "  ELSE"
  1249.  
  1250. TEXT
  1251.     *--------------------------------------------------------
  1252.     *-- Otherwise, use the values stored in the resource file
  1253.     *--------------------------------------------------------
  1254. ENDTEXT
  1255.  
  1256.   GO TOP
  1257.   n = 1                                 && Pointer to init array
  1258.   cN = LTRIM( STR( n, 2 ) )
  1259.   SCAN FOR currentid <> 0
  1260.  
  1261.     cField = TRIM( fieldname )
  1262.     cClass = LEFT( cField, 3 )
  1263.     IF cClass $ "CK_,RB_,LB_,UD_,CS_,CL_,CD_" .AND. RIGHT( cField, 2 ) = "_1"
  1264.       cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  1265.     ENDIF
  1266.  
  1267.     *---------------------------------------------------------------
  1268.     *-- Since there is no array, need to go to the file for defaults
  1269.     *---------------------------------------------------------------
  1270.     cDefault = def_val
  1271.     cDefault = UPPER( TRIM( cDefault ) )
  1272.     lBlankDef = ISBLANK( cDefault )
  1273.  
  1274.     IF .NOT. lBlankDef
  1275.       *-------------------------------------------------------------
  1276.       *-- Need to pad any pre-defined char field to match either the
  1277.       *-- scroll or template width of the field
  1278.       *-------------------------------------------------------------
  1279.       Value = &cDefault
  1280.       DO CASE
  1281.         CASE value_type = "C"
  1282.           nValue = LEN( Value )
  1283.           IF pic_scroll > 0
  1284.             nPadding = pic_scroll - nValue
  1285.           ELSE
  1286.             cTemplate = TRIM( template )
  1287.             nLenTemp = LEN( cTemplate )
  1288.             nPadding = nLenTemp - nValue
  1289.           ENDIF
  1290.           IF nPadding > 0
  1291.             Value = '"' + Value + SPACE( nPadding ) + '"'
  1292.           ENDIF
  1293.         CASE value_type $ "NFD"
  1294.           Value = cDefault
  1295.         OTHERWISE
  1296.           Value = cDefault
  1297.       ENDCASE
  1298.  
  1299.     ELSE
  1300.       *---------------------------------------------------------
  1301.       *-- There is a blank default, but we have to check now for
  1302.       *-- multiple choice values to get the default value based
  1303.       *-- on the first item in the list.
  1304.       *---------------------------------------------------------
  1305.       DO CASE
  1306.         CASE value_type = "C"
  1307.           IF .NOT. ISBLANK( pic_choice )
  1308.             cPopChoice = pic_choice
  1309.             cPopChoice = TRIM( cPopChoice )
  1310.             cPopType = LEFT( UPPER( cPopChoice ), 4 )
  1311.  
  1312.             IF cPopType = "FILE" .OR. cPopType = "FIEL" .OR. ;
  1313.                cPopType = "STRU" .OR. LEFT(cPopType,3) = "DO "
  1314.               *------------------------------------------------------------
  1315.               *-- If this is a popup definition, then we only determine the
  1316.               *-- size of the file.
  1317.               *------------------------------------------------------------
  1318.               Value = IIF( pic_scroll > 0, SPACE( pic_scroll ), SPACE( LEN( TRIM( template ) ) ) )
  1319.             ELSE
  1320.               *--------------------------------------------------------
  1321.               *-- For any other value, pick off the first choice in the
  1322.               *-- list and pad the rest of the string
  1323.               *--------------------------------------------------------
  1324.               nComma = AT( ",", cPopChoice )
  1325.               IF nComma > 0
  1326.                 Value = LEFT( cPopChoice, nComma - 1 )
  1327.               ELSE
  1328.                 Value = cPopChoice
  1329.               ENDIF
  1330.  
  1331.               nValue = LEN( Value )
  1332.               IF pic_scroll > 0
  1333.                 nPadding = pic_scroll - nValue
  1334.               ELSE
  1335.                 cTemplate = TRIM( template )
  1336.                 nLenTemp = LEN( cTemplate )
  1337.                 nPadding = nLenTemp - nValue
  1338.               ENDIF
  1339.               IF nPadding > 0
  1340.                 Value = Value + SPACE( nPadding )
  1341.               ENDIF
  1342.             ENDIF
  1343.           ELSE
  1344.             Value = IIF( pic_scroll > 0, SPACE( pic_scroll ), SPACE( LEN( TRIM( template ) ) ) )
  1345.           ENDIF
  1346.           Value = Delimit( Value )
  1347.  
  1348.         *---------------------------------------------------------
  1349.         *-- There is no multiple choice option for the rest of the
  1350.         *-- variable types, so set the values to blank.
  1351.         *---------------------------------------------------------
  1352.         CASE value_type = "N"
  1353.           Value = 0
  1354.         CASE value_type = "D"
  1355.           Value = "{  /  /  }"
  1356.         CASE value_type = "L"
  1357.           Value = .F.
  1358.         OTHERWISE
  1359.           Value = .F.
  1360.       ENDCASE
  1361.     ENDIF
  1362.  
  1363.     *-----------------------------------------------------------
  1364.     *-- Finally set the object variable to the established value
  1365.     *-----------------------------------------------------------
  1366.     DO CASE
  1367.       CASE cClass = "CS_"
  1368.   ? "   ", cField, "=", Value
  1369.       CASE cClass = "CL_"
  1370.   ? "   ", cField, "=", Value
  1371.       CASE cClass = "CD_"
  1372.   ? "   ", cField, "=", Value
  1373.       CASE cClass = "EF_"
  1374.   ? "   ", cField, "=", Value
  1375.       CASE cClass = "LB_"
  1376.   ? "   ", cField, "= 0",
  1377.       CASE cClass = "UD_"
  1378.   ? "   ", cField, "= 0",
  1379.       CASE cClass = "CK_"
  1380.         IF lBlankDef
  1381.   ? "   ", cField, "= .F."
  1382.         ELSE
  1383.   ? "   ", cField, "=", cDefault
  1384.           IF cDefault = ".T."
  1385.   ? "   ", cVar, "=", TSTR( RECNO() ), ;
  1386.     " " AT 38, "&"+"& Store the group default value"
  1387.           ENDIF
  1388.         ENDIF
  1389.  
  1390.       CASE cClass = "RB_"
  1391.         IF lBlankDef
  1392.   ? "   ", cField, "= .F."
  1393.         ELSE
  1394.   ? "   ", cField, "=", cDefault
  1395.           IF cDefault = ".T."
  1396.   ? "   ", cVar, "=", TSTR( RECNO() ), ;
  1397.     " " AT 38, "&"+"& Store the group default value"
  1398.           ENDIF
  1399.         ENDIF
  1400.  
  1401.       CASE cClass = "BT_"
  1402.   ? "   ", cField, "=", IIF( "DEFAULT" $ cDefault, ".T.", ".F." )
  1403.     ENDCASE
  1404.  
  1405.     n = n + 1
  1406.     cN = LTRIM( STR( n, 2 ) )
  1407.   ENDSCAN
  1408.  
  1409.   ? "  ENDIF"
  1410.  
  1411.   SET FILTER TO currentid > 0
  1412.   GO TOP
  1413.  
  1414.   l1stTime = .T.
  1415.   n1stGroup  = groupid
  1416.   n1stObject = RECNO()
  1417.   c1stClass  = LEFT( fieldname, 3 )
  1418.   cVar = "n" + LEFT( fieldname, RAT( "_", fieldname ) - 1 )
  1419.   IF c1stClass = "RB_"
  1420. ? "  nCurrent  =", cVar
  1421. ??  "&"+"& Current dialog object id" AT 41
  1422.   ELSE
  1423.     nCurrent = RECNO()
  1424. ? "  nCurrent  =", TSTR( RECNO() ), ;
  1425.   " " AT 38, "&"+"& Current dialog object id"
  1426.   ENDIF
  1427.  
  1428.   nCurrGrp = groupid
  1429.   n1stGrp  = groupid
  1430. ? "  nCurrGrp  =", TSTR( groupid ), ;
  1431.   " " AT 38, "&"+"& Current group id for object id"
  1432. ? "  n1stGrp   =", TSTR( groupid )
  1433. *    cField = TRIM( fieldname )
  1434. *    DO GenLabel WITH cField, nCurrent, BN_HILITE, 2
  1435.  
  1436.   SET FILTER TO
  1437.  
  1438. TEXT
  1439.  
  1440. RETURN
  1441. *-- EOP: InitObjs
  1442.  
  1443. ENDTEXT
  1444.  
  1445. RETURN
  1446. *-- EOP: GenInitO
  1447.  
  1448.  
  1449. PROCEDURE GenDraw
  1450. *----------------------------------------------------------------------------
  1451. * NAME
  1452. *   GenDraw - Generate calls to the draw routines
  1453. *
  1454. * DESCRIPTION
  1455. *
  1456. *----------------------------------------------------------------------------
  1457. TEXT
  1458. PROCEDURE DrawDial
  1459. *----------------------------------------------------------------------------
  1460. * NAME
  1461. *   DrawDial -
  1462. *
  1463. * DESCRIPTION
  1464. *
  1465. *----------------------------------------------------------------------------
  1466.   PRIVATE lInitDef
  1467. ENDTEXT
  1468.  
  1469.   ? '  lInitDef = TYPE( "' + pcDbfDial +'[1]" ) <> "U"'
  1470.   ? '  IF FILE( "' + pcDbfDial + ".WIN" + '" ) .AND. ( .NOT. lInitDef .OR. ;'
  1471.   ? '     ( TYPE( "FXL_NoChng" ) = "L" .AND. FXL_NoChng ) )'
  1472.   ? '    *--------------------'
  1473.   ? '    *-- Dialog box shadow'
  1474.   ? '    *--------------------'
  1475.   ? '    SAVE SCREEN TO', pcDbfDial
  1476.   ? '    ACTIVATE SCREEN'
  1477.       GO TOP
  1478.       sr = row + 1
  1479.       sc = col + 1
  1480.       br = row + decimals
  1481.       bc = col + length
  1482.   ? '    @', TSTR( sr ) + ', ' + TSTR( sc ), 'FILL TO '
  1483.   ??         TSTR( br ) + ', ' + TSTR( bc )
  1484.   ?
  1485.  
  1486.   ? '    RESTORE WINDOW ' + pcDbfDial + " FROM " + pcDbfDial
  1487.   ? '    ACTIVATE WINDOW ' + pcDbfDial
  1488.       SCAN FOR ( LEFT( fieldname, 3 ) $ "CS_,CL_,CD_,LB_,UD_" .AND. currentid <> 0 ) ;
  1489.            .OR. fieldname = "TI_TEXT"
  1490.         cClass = LEFT( fieldname, 3 )
  1491.         DO CASE
  1492.           CASE cClass = "CS_"
  1493.   ? '    DO TCombo WITH WM_PAINT, CB_SHOWDRO,', TSTR( RECNO() )
  1494.           CASE cClass = "CD_"
  1495.   ? '    DO TCombo WITH WM_PAINT, CB_HIDELST,', TSTR( RECNO() )
  1496.           CASE cClass = "CL_"
  1497.   ? '    DO TCombo WITH WM_PAINT, CB_HIDELST,', TSTR( RECNO() )
  1498.           CASE cClass = "LB_"
  1499.   ? '    DO TList WITH WM_PAINT, WM_DRAWITEM,', TSTR( RECNO() )
  1500.           CASE cClass = "UD_"
  1501.   ? '    DO TUser WITH WM_PAINT, WM_DRAWITEM,', TSTR( RECNO() )
  1502.           CASE cClass = "TI_"
  1503.           cMemvar = pic_choice
  1504.           cMemcar = TRIM( cMemvar )
  1505.           IF LEFT( cMemvar, 1 ) = "{"
  1506.             cMemvar = SUBSTR( cMemvar, 2, LEN( cMemvar ) - 2 )
  1507. ? '    IF TYPE( "' + cMemvar + '" ) = "C"'
  1508. ? "      @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1509.          "SAY HelpCTit(",cMemvar+",",TSTR(LEN(TRIM(template)))+", .T. )", ;
  1510.          "COLOR", cClrTit
  1511. ? '    ELSE'
  1512. ? "      @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1513.            'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  1514.            ') COLOR', cClrTit
  1515. ? '    ENDIF'
  1516.           ENDIF
  1517.  
  1518.         ENDCASE
  1519.       ENDSCAN
  1520. TEXT
  1521.   ELSE
  1522.     *-------------------------
  1523.     *-- Draw the dialog window
  1524.     *-------------------------
  1525. ENDTEXT
  1526.       GO TOP
  1527.       cFrom = expression
  1528.       cFrom = TRIM( cFrom )
  1529.   ? '    *--------------------'
  1530.   ? '    *-- Dialog box shadow'
  1531.   ? '    *--------------------'
  1532.   ? '    SAVE SCREEN TO', pcDbfDial
  1533.   ? '    ACTIVATE SCREEN'
  1534.       sr = row + 1
  1535.       sc = col + 1
  1536.       br = row + decimals
  1537.       bc = col + length
  1538.   ? '    @', TSTR( sr ) + ', ' + TSTR( sc ), 'FILL TO '
  1539.   ??         TSTR( br ) + ', ' + TSTR( bc )
  1540.   ?
  1541.  
  1542.   ? '    DEFINE WINDOW', pcDbfDial, cFrom, 'NONE COLOR', cClrDlg
  1543.   ? '    ACTIVATE WINDOW', pcDbfDial
  1544.   ? '    @ 0, 0 TO', TSTR(decimals-1), ',', TSTR(length-1), 'DOUBLE COLOR', cClrTit
  1545. TEXT
  1546.     *------------------------
  1547.     *-- Close Icon for window
  1548.     *------------------------
  1549. ENDTEXT
  1550.   ? '    @ 0, 2 SAY "[ ]" COLOR', cClrTit
  1551.   ? '    @ 0, 3 SAY CHR( 254 ) COLOR', cClrWBt
  1552.  
  1553. TEXT
  1554.  
  1555.     *---------------------------------
  1556.     *-- Draw the other control objects
  1557.     *---------------------------------
  1558. ENDTEXT
  1559.  
  1560.     SCAN
  1561.       cClass = LEFT( fieldname, 3 )
  1562.       DO CASE
  1563.         CASE RECNO() = 1
  1564.           LOOP
  1565.  
  1566.         CASE value_type = "B" .AND. RIGHT( TRIM( fieldname ), 2 ) = "_1"
  1567.           LOOP
  1568.  
  1569.         CASE value_type = "B" .AND. ISBLANK( fieldname )
  1570.           nTopRow = sr - 1
  1571.           nTopCol = sc - 1
  1572.   ? '    @', TSTR( row - nTopRow ) + ',' + TSTR( col - nTopCol ), 'TO', ;
  1573.           TSTR( row - nTopRow + decimals - 1 ) + ',' + TSTR( col - nTopCol + length )
  1574.           DO CASE
  1575.             CASE mem_typ = 0
  1576.               cBorder = ""
  1577.             CASE mem_typ = 1
  1578.   ?? ' DOUBLE'
  1579.             CASE mem_typ = 2
  1580.   ?? ' ' + TRIM( filename )
  1581.           ENDCASE
  1582.           cSayColor = GetColor( display )
  1583.           IF .NOT. ISBLANK( cSayColor )
  1584.   ?? ' COLOR', cSayColor
  1585.           ENDIF
  1586.  
  1587.         CASE value_type = "T"           && Text element
  1588.           IF sys_flen = 0
  1589.   ? '    @',TSTR(sys_flen)+','+TSTR(length)+' SAY ' +;
  1590.            Delimit( TRIM( template ) ) + ' COLOR',cClrTit
  1591.           ELSE
  1592.             IF .NOT. ISBLANK( picfun )
  1593.               cSayColor = TRIM( picfun )
  1594.   ? '    @',TSTR(sys_flen)+','+TSTR(length)+' SAY '+ ;
  1595.            Delimit( TRIM( template ) ) + ' COLOR',cSayCOlor
  1596.             ELSE
  1597.   ? '    @',TSTR(sys_flen)+','+TSTR(length)+' SAY ' +;
  1598.            Delimit( TRIM( template ) )
  1599.             ENDIF
  1600.           ENDIF
  1601.  
  1602.         CASE TRIM( fieldname ) = "TI_TEXT"
  1603.           cMemvar = pic_choice
  1604.           cMemcar = TRIM( cMemvar )
  1605.           IF LEFT( cMemvar, 1 ) = "{"
  1606.             cMemvar = SUBSTR( cMemvar, 2, LEN( cMemvar ) - 2 )
  1607. ? '    IF TYPE( "' + cMemvar + '" ) = "C"'
  1608. ? "      @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1609.          "SAY HelpCTit(",cMemvar+",",TSTR(LEN(TRIM(template)))+", .T. )", ;
  1610.          "COLOR", cClrTit
  1611. ? '    ELSE'
  1612. ? "      @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1613.            'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  1614.            ') COLOR', cClrTit
  1615. ? '    ENDIF'
  1616.  
  1617.           ENDIF
  1618.  
  1619.         CASE RIGHT( TRIM( fieldname ), 2 ) = "_0"
  1620.   ? '    DO TStatic WITH WM_PAINT, BN_PAINT,', TSTR( RECNO() )
  1621.  
  1622.         CASE cClass = "BT_"             && Button
  1623.   ? '    DO TButton WITH WM_PAINT, BN_PAINT,', TSTR( RECNO() )
  1624.           IF carry
  1625.   ? '    DO TButton WITH WM_PAINT, SE_SHADOW,', TSTR( RECNO() )
  1626.           ENDIF
  1627.  
  1628.         CASE cClass = "EF_"             && Edit field
  1629.   ? '    DO TEdit WITH WM_PAINT, EN_KILLFOC,', TSTR( RECNO() )
  1630.  
  1631.         CASE cClass = "CD_"             && Combo box drop down
  1632.   ? '    DO TCombo WITH WM_PAINT, CB_HIDELST,', TSTR( RECNO() )
  1633.  
  1634.         CASE cClass = "CS_"             && Combo box simple
  1635.   ? '    DO TEdit WITH WM_PAINT, EN_KILLFOC,', TSTR( RECNO() )
  1636.   ? '    DO TCombo WITH WM_PAINT, CB_SHOWDRO,', TSTR( RECNO() )
  1637.  
  1638.         CASE cClass = "CL_"             && Combo box drop down list
  1639.   ? '    DO TCombo WITH WM_PAINT, CB_HIDELST,', TSTR( RECNO() )
  1640.  
  1641.         CASE cClass = "LB_"             && List box
  1642.   ? '    DO TList WITH WM_PAINT, WM_DRAWITEM,', TSTR( RECNO() )
  1643.  
  1644.         CASE cClass = "UD_"             && User defined
  1645.   ? '    DO TUser WITH WM_PAINT, WM_DRAWITEM,', TSTR( RECNO() )
  1646.  
  1647.         CASE cClass = "CK_"             && Check box
  1648.   ? '    DO TButton WITH WM_PAINT, BN_PAINT,', TSTR( RECNO() )
  1649.  
  1650.         CASE cClass = "RB_"             && Radio button
  1651.   ? '    DO TButton WITH WM_PAINT, BN_PAINT,', TSTR( RECNO() )
  1652.  
  1653.       ENDCASE
  1654.  
  1655.     ENDSCAN
  1656.  
  1657.     IF TYPE( "nCurrent" ) = "N" .AND. nCurrent > 0
  1658.       GOTO nCurrent
  1659.     ENDIF
  1660. TEXT
  1661.     IF .NOT. lInitDef
  1662. ENDTEXT
  1663.  
  1664.   ? '      SAVE WINDOW', pcDbfDial, 'TO', pcDbfDial
  1665.  
  1666. TEXT
  1667.     ENDIF
  1668.   ENDIF
  1669. RETURN
  1670. *-- EOP: DrawDial
  1671.  
  1672.  
  1673. ENDTEXT
  1674.  
  1675. RETURN
  1676. *-- EOP: GenDraw
  1677.  
  1678.  
  1679. PROCEDURE GenLabel
  1680. PARAMETERS pc_Field, pn_Current, pn_Way, pn_Indent
  1681. *----------------------------------------------------------------------------
  1682. * NAME
  1683. *   GenLabel - Output the command to print the group label
  1684. *
  1685. * DESCRIPTION
  1686. *
  1687. * PARAMETERS
  1688. *   pc_Field   =
  1689. *   pn_Current =
  1690. *   pn_Way     = BN_HILITE or BN_UNHILITE
  1691. *   pn_Indent  = Spaces to indent
  1692. *
  1693. *----------------------------------------------------------------------------
  1694.   *-------------------------------------------------
  1695.   *-- Look to see if the object in focus has a title
  1696.   *-------------------------------------------------
  1697.   IF RIGHT( TRIM( pc_Field ), 1 ) $ "123456789"
  1698.     IF groupid > 0
  1699.       GOTO groupid
  1700.       IF RIGHT( TRIM( fieldname ), 1 ) = "0"
  1701.         IF .NOT. ISBLANK( template )
  1702.           IF pn_WAY = BN_HILITE
  1703.  
  1704.             IF ISBLANK( pickkey )
  1705.  
  1706.   ? SPACE( pn_Indent )
  1707.   ?? "@", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1708.      "SAY", '"' + TRIM( template ) + '"', "COLOR", cClrStA
  1709.  
  1710.             ELSE
  1711.               nLocPick = AT( "~"+pickkey, template )
  1712.               ctext = descript
  1713.  
  1714.   ? SPACE( pn_Indent )
  1715.   ?? "@", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1716.      "SAY", TRIM( ctext ) , "COLOR", cClrStA
  1717.  
  1718.             ENDIF
  1719.  
  1720.           ELSE
  1721.  
  1722.             IF ISBLANK( pickkey )
  1723.  
  1724.   ? SPACE( pn_Indent )
  1725.   ?? "@", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1726.      "SAY", '"' + TRIM( template ) + '"', "COLOR", cClrStI
  1727.  
  1728.             ELSE
  1729.               nLocPick = AT( "~"+pickkey, template )
  1730.               ctext = descript
  1731.  
  1732.   ? SPACE( pn_Indent )
  1733.   ?? "@", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1734.      "SAY", TRIM( ctext ) , "COLOR", cClrStI
  1735.  
  1736.             ENDIF
  1737.  
  1738.           ENDIF
  1739.           IF .NOT. ISBLANK( pickkey )
  1740.   ? "        @", TSTR( sys_flen ) + ", " + TSTR( length + nLocPick - 1 ), ;
  1741.               'SAY "' +  pickkey  + '" COLOR', cClrStP
  1742.           ENDIF
  1743.         ENDIF
  1744.       ENDIF
  1745.       GOTO pn_Current
  1746.     ENDIF
  1747.   ENDIF
  1748.  
  1749. RETURN
  1750. *-- EOP: GenLabel WITH pc_Field, pn_Current, pn_Way, pn_Indent
  1751.  
  1752.  
  1753. PROCEDURE GTStatic
  1754. PARAMETERS pn_msg, pc_data, pnObject
  1755. *----------------------------------------------------------------------------
  1756. * NAME
  1757. *   GTStatic -
  1758. *
  1759. * DESCRIPTION
  1760. *
  1761. * PARAMETERS
  1762. *   pn_msg     =
  1763. *   pc_data    =
  1764. *   pnObject   =
  1765. *
  1766. *----------------------------------------------------------------------------
  1767.   SET FILTER TO RIGHT( TRIM( fieldname ), 2 ) = "_0" .OR. fieldname = "TI_TEXT"
  1768.   GO TOP
  1769.   IF .NOT. EOF()
  1770.  
  1771. TEXT
  1772.  
  1773. PROCEDURE TStatic
  1774. PARAMETERS pn_msg, pc_data, pnObject
  1775. *----------------------------------------------------------------------------
  1776. * NAME
  1777. *   TStatic -
  1778. *
  1779. * DESCRIPTION
  1780. *
  1781. * PARAMETERS
  1782. *   pn_msg     =
  1783. *   pc_data    =
  1784. *   pnObject   =
  1785. *
  1786. *----------------------------------------------------------------------------
  1787.   DO CASE
  1788. ENDTEXT
  1789.  
  1790.     SCAN
  1791.       cMemvar = pic_choice
  1792.       cMemcar = TRIM( cMemvar )
  1793.       IF LEFT( cMemvar, 1 ) = "{"
  1794.         lMemvar = .T.
  1795.         cMemvar = SUBSTR( cMemvar, 2, LEN( cMemvar ) - 2 )
  1796.       ELSE
  1797.         lMemvar = .F.
  1798.       ENDIF
  1799.  
  1800.       cSayColor = GetColor( display )
  1801.  
  1802. ? "    CASE pnObject =", TSTR( RECNO() )
  1803. ? '      DO CASE'
  1804. ? '        CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE'
  1805.       IF ISBLANK( pickkey )
  1806.         IF .NOT. lMemvar
  1807. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1808.               "SAY", Delimit( TRIM( template ) ), "COLOR", cClrStI
  1809.         ELSE
  1810. ? '          IF TYPE( "' + cMemvar + '" ) = "C"'
  1811. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1812.                 "SAY", cMemvar, "COLOR", cClrStI
  1813. ? '          ELSE'
  1814. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1815.                 'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  1816.                 ') COLOR', cClrStI
  1817. ? '          ENDIF'
  1818.         ENDIF
  1819.       ELSE
  1820.         nLocPick = AT( "~"+pickkey, template )
  1821.         ctext = descript
  1822.  
  1823. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1824.               "SAY", TRIM( ctext ) , "COLOR", cClrStI
  1825.       ENDIF
  1826.  
  1827. ? '        CASE pc_data = BN_HILITE'
  1828.  
  1829.       IF ISBLANK( pickkey )
  1830.         IF .NOT. lMemvar
  1831. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1832.               "SAY", Delimit( TRIM( template ) ), "COLOR", cClrStA
  1833.         ELSE
  1834. ? '          IF TYPE( "' + cMemvar + '" ) = "C"'
  1835. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1836.                 "SAY", cMemvar, "COLOR", cClrStA
  1837. ? '          ELSE'
  1838. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1839.                 'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  1840.                 ') COLOR', cClrStA
  1841. ? '          ENDIF'
  1842.         ENDIF
  1843.       ELSE
  1844.         nLocPick = AT( "~"+pickkey, template )
  1845.         ctext = descript
  1846.  
  1847. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1848.               "SAY", TRIM( ctext ) , "COLOR", cClrStA
  1849.       ENDIF
  1850.  
  1851. ? '        CASE pc_data = BN_DISABLE'
  1852.       IF ISBLANK( pickkey )
  1853.         IF .NOT. lMemvar
  1854. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1855.               "SAY", Delimit( TRIM( template ) ), "COLOR", cClrStN
  1856.         ELSE
  1857. ? '          IF TYPE( "' + cMemvar + '" ) = "C"'
  1858. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1859.                 "SAY", cMemvar, "COLOR", cClrStN
  1860. ? '          ELSE'
  1861. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1862.                 'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  1863.                 ') COLOR', cClrStN
  1864. ? '          ENDIF'
  1865.         ENDIF
  1866.       ELSE
  1867.         nLocPick = AT( "~"+pickkey, template )
  1868.         ctext = descript
  1869.  
  1870. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1871.               "SAY", TRIM( ctext ) , "COLOR", cClrStN
  1872.       ENDIF
  1873.  
  1874. ? '        CASE pc_data = BN_COLOR'
  1875.       IF ISBLANK( cSayColor )
  1876.         cSayColor = cClrStI
  1877.       ENDIF
  1878.       IF ISBLANK( pickkey )
  1879.         IF .NOT. lMemvar
  1880. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1881.               "SAY", Delimit( TRIM( template ) ), "COLOR", cSayColor
  1882.         ELSE
  1883. ? '          IF TYPE( "' + cMemvar + '" ) = "C"'
  1884. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1885.                 "SAY", cMemvar, "COLOR", cSayColor
  1886. ? '          ELSE'
  1887. ? "            @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1888.                 'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  1889.                 ') COLOR', cSayColor
  1890. ? '          ENDIF'
  1891.         ENDIF
  1892.       ELSE
  1893.         nLocPick = AT( "~"+pickkey, template )
  1894.         ctext = descript
  1895.  
  1896. ? "          @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  1897.               "SAY", TRIM( ctext ) , "COLOR", cSayColor
  1898.       ENDIF
  1899. ? "      ENDCASE"
  1900.  
  1901.       IF .NOT. ISBLANK( pickkey )
  1902. ? '      IF pc_data <> BN_DISABLE'
  1903. ? "        @", TSTR( sys_flen ) + ", " + TSTR( length + nLocPick - 1 ), ;
  1904.             'SAY "' +  pickkey  + '" COLOR', cClrStP
  1905. ? '      ENDIF'
  1906.       ENDIF
  1907.  
  1908.     ENDSCAN
  1909.     SET FILTER TO
  1910. ? "  ENDCASE"
  1911.  
  1912. TEXT
  1913.  
  1914. RETURN
  1915. *-- EOP: TStatic WITH pn_msg, pc_data, pnObject
  1916.  
  1917. ENDTEXT
  1918.  
  1919.   ENDIF
  1920.  
  1921. RETURN
  1922. *-- EOP: GTStatic WITH pn_msg, pc_data, pnObject
  1923.  
  1924. PROCEDURE GHasTitle
  1925. *----------------------------------------------------------------------------
  1926. * NAME
  1927. *   GHasTitle -
  1928. *
  1929. * DESCRIPTION
  1930. *
  1931. *----------------------------------------------------------------------------
  1932.   SET FILTER TO RIGHT( TRIM( fieldname ), 1 ) $ "123456789" .AND. ;
  1933.                 groupid > 0
  1934.   GO TOP
  1935.   IF .NOT. EOF()
  1936. TEXT
  1937. PROCEDURE HasTitle
  1938. PARAMETERS pnObject, pnWay
  1939. *----------------------------------------------------------------------------
  1940. * NAME
  1941. *   HasTitle - Display the label for the group of objects
  1942. *
  1943. * DESCRIPTION
  1944. *
  1945. * PARAMETERS
  1946. *   pnObject   = nCurrent value for group item
  1947. *   pnWay      = BN_HILITE, BN_UNHILITE, or BN_DISABLE
  1948. *
  1949. *----------------------------------------------------------------------------
  1950.   DO CASE
  1951. ENDTEXT
  1952.     SCAN
  1953.   ? "    CASE pnObject =", TSTR( RECNO() )
  1954.       nObj = RECNO()
  1955.       GOTO groupid
  1956.       IF RIGHT( TRIM( fieldname ), 1 ) = "0"
  1957.         IF .NOT. ISBLANK( template )
  1958.   ? "      DO TStatic WITH WM_PAINT, pnWay,", TSTR( RECNO() )
  1959.         ENDIF
  1960.       ENDIF
  1961.       GOTO nObj
  1962.     ENDSCAN
  1963.  
  1964. TEXT
  1965.  
  1966.   ENDCASE
  1967.  
  1968. *-- EOP: HasTitle WITH pnObject, pnWay
  1969.  
  1970.  
  1971. ENDTEXT
  1972.  
  1973.  
  1974.   ELSE
  1975.  
  1976. TEXT
  1977.  
  1978. PROCEDURE HasTitle
  1979. PARAMETERS pnObject, pnWay
  1980. *----------------------------------------------------------------------------
  1981. * NAME
  1982. *   HasTitle - Stub
  1983. *
  1984. *----------------------------------------------------------------------------
  1985. RETURN
  1986. *-- EOP: HasTitle WITH pnObject, pnWay
  1987.  
  1988. ENDTEXT
  1989.  
  1990.   ENDIF
  1991.   SET FILTER TO
  1992.  
  1993. RETURN
  1994. *-- EOP: GHasTitle
  1995.  
  1996.  
  1997. PROCEDURE GGetMess
  1998. *----------------------------------------------------------------------------
  1999. * NAME
  2000. *   GGetMess -
  2001. *
  2002. * DESCRIPTION
  2003. *
  2004. *----------------------------------------------------------------------------
  2005. TEXT
  2006.  
  2007. FUNCTION GetMess
  2008. *----------------------------------------------------------------------------
  2009. * NAME
  2010. *   GetMess() -
  2011. * DEPENDENCIES
  2012. *   Uses nCurrent to determine the wait state for the given object.
  2013. *----------------------------------------------------------------------------
  2014.   PRIVATE lRtn
  2015.  
  2016.   DO CASE
  2017. ENDTEXT
  2018.  
  2019.   SET ORDER TO ObjOrder
  2020.   SCAN FOR currentid <> 0
  2021.  
  2022.     cField = TRIM( fieldname )
  2023.     cClass = LEFT( cField, 3 )
  2024.  
  2025. ? '    CASE nCurrent =', TSTR( RECNO() ), ;
  2026.     " " AT 38, "&"+"&", cField
  2027.  
  2028.     DO CASE
  2029.       CASE cClass = "BT_"                 && Button
  2030.  
  2031.         IF nDlgDef > 0 .AND. nDlgDef <> RECNO()
  2032. ? '      DO TButton WITH WM_PAINT, BN_UNHILITE,', TSTR( nDlgDef )
  2033. ? '     ', cField, '= .F.'
  2034.         ENDIF
  2035. ? '      DO GetWait'
  2036.         bt = .t.
  2037.  
  2038.       CASE cClass = "EF_"                 && Edit field
  2039. ? '      ON KEY LABEL F1 DO DlgHlpHd'
  2040. ? '      DO GetEdit'
  2041. ? '      ON KEY LABEL F1'
  2042.         ef = .t.
  2043.  
  2044.       CASE cClass = "CD_"                 && Combo box drop down
  2045. ? '      ON KEY LABEL F1 DO DlgHlpHd'
  2046. ? '      DO GetDD'
  2047. ? '      ON KEY LABEL F1'
  2048.         cd = .t.
  2049.  
  2050.       CASE cClass = "CS_"                 && Combo box simple
  2051. ? '      ON KEY LABEL F1 DO DlgHlpHd'
  2052. ? '      DO GetEdit'
  2053. ? '      ON KEY LABEL F1'
  2054.         cs = .t.
  2055.  
  2056.       CASE cClass = "CL_"                 && Combo box drop down list
  2057. ? '      DO GetDDL'
  2058.         cl = .t.
  2059.  
  2060.       CASE cClass = "LB_"                 && List box
  2061. ? '      ON KEY LABEL F1 DO DlgHlpHd'
  2062. ? '      DO TList WITH LBN_SETFOC, .F.,', TSTR( RECNO() )
  2063. ? '      ON KEY LABEL F1'
  2064.         lb = .t.
  2065.  
  2066.       CASE cClass = "UD_"                 && User defined
  2067. ? '      DO TUser WITH LBN_SETFOC, .F.,', TSTR( RECNO() )
  2068.         ud = .t.
  2069.  
  2070.       CASE cClass = "CK_"                 && Check box
  2071. ? '      DO GetWait'
  2072.         ck = .t.
  2073.  
  2074.       CASE cClass = "RB_"                 && Radio button
  2075. ? '      DO GetWait'
  2076.         rb = .t.
  2077.  
  2078.     ENDCASE
  2079.  
  2080.   ENDSCAN
  2081.  
  2082. TEXT
  2083.   ENDCASE
  2084.  
  2085.   IF nMess = KB_F1
  2086.     DO _HelpSys WITH cDialog, ;
  2087.        LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  2088.              aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  2089.        cHelpFile
  2090.   ENDIF
  2091.  
  2092.   IF nMess = KB_ESC
  2093.     lRtn = .T.
  2094.   ELSE
  2095.     lRtn = .F.
  2096.   ENDIF
  2097.  
  2098. RETURN lRtn
  2099. *-- EOF: GetMess(  )
  2100.  
  2101. PROCEDURE DlgHlpHd
  2102. *----------------------------------------------------------------------------
  2103. * NAME
  2104. *   DlgHlpHd - 
  2105. *
  2106. * DESCRIPTION
  2107. *
  2108. *----------------------------------------------------------------------------
  2109.     DO _HelpSys WITH cDialog, ;
  2110.        LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  2111.              aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  2112.        cHelpFile
  2113.     nMess = 0
  2114.  
  2115. RETURN
  2116. *-- EOP: DlgHlpHd
  2117.  
  2118. ENDTEXT
  2119.  
  2120. RETURN
  2121.  
  2122. *-- EOP: GGetMess
  2123.  
  2124.  
  2125. PROCEDURE GGetWait
  2126. *----------------------------------------------------------------------------
  2127. * NAME
  2128. *   GGetWait -
  2129. *
  2130. * DESCRIPTION
  2131. *
  2132. *----------------------------------------------------------------------------
  2133. TEXT
  2134.  
  2135. PROCEDURE GetWait
  2136. *----------------------------------------------------------------------------
  2137. * NAME
  2138. *   GetWait -
  2139. *
  2140. * DESCRIPTION
  2141. *
  2142. *----------------------------------------------------------------------------
  2143.   nMess = 0
  2144.   nAccel = 0
  2145.  
  2146.   lButtAct = .T.
  2147.   DO TButton WITH WM_PAINT, BN_HILITE, nCurrent
  2148.  
  2149.   SET CONSOLE OFF
  2150.   SET CURSOR OFF
  2151.   WAIT
  2152.   SET CONSOLE ON
  2153.  
  2154.   nMess = LASTKEY()
  2155.   nMRow = MROW()
  2156.   nMCol = MCOL()
  2157.  
  2158. RETURN
  2159. *-- EOP: GetWait
  2160.  
  2161. ENDTEXT
  2162.  
  2163. RETURN
  2164. *-- EOP: GGetWait
  2165.  
  2166.  
  2167. PROCEDURE GTButton
  2168. *----------------------------------------------------------------------------
  2169. * NAME
  2170. *   GTButton -
  2171. *
  2172. * DESCRIPTION
  2173. *
  2174. *----------------------------------------------------------------------------
  2175. TEXT
  2176.  
  2177. PROCEDURE TButton
  2178. PARAMETERS pn_msg, pc_data, pnObject
  2179. *----------------------------------------------------------------------------
  2180. * NAME
  2181. *   TButton -
  2182. *
  2183. * DESCRIPTION
  2184. *
  2185. * PARAMETERS
  2186. *   pn_msg     =
  2187. *   pc_data    =
  2188. *   pnObject   =
  2189. *
  2190. *----------------------------------------------------------------------------
  2191.   DO CASE
  2192. ENDTEXT
  2193.   SET ORDER TO ObjOrder
  2194.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "RB_,CK_,BT_"
  2195.     cClass = LEFT( fieldname, 3 )
  2196.     cField = TRIM( fieldname )
  2197.   ? '    CASE pnObject =', TSTR( RECNO() ), ;
  2198.     " " AT 38, "&"+"&", cField
  2199.   ? '      DO CASE'
  2200.   ? '        CASE pn_msg = WM_PAINT'
  2201.     DO CASE
  2202.       CASE cClass = "BT_"
  2203.         IF ISBLANK( descript )
  2204.           cPrompt = Delimit( TRIM( template ) )
  2205.         ELSE
  2206.           cPrompt = descript
  2207.           IF cPrompt = '"^"'
  2208.             cPrompt = "'" + CHR(30) + "'"
  2209.           ELSE
  2210.             IF cPrompt = '"v"'
  2211.               cPrompt = "'" + CHR(31) + "'"
  2212.             ENDIF
  2213.           ENDIF
  2214.         ENDIF
  2215.   ? '          DO CASE'
  2216.   ? '            CASE pc_data = BN_PAINT'
  2217.         IF nDlgDef = RECNO()
  2218.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2219.                     'SAY', cPrompt, 'COLOR', cClrBtD
  2220.         ELSE
  2221.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2222.                     'SAY', cPrompt, 'COLOR', cClrBtI
  2223.         ENDIF
  2224.   ? '            CASE pc_data = BN_HILITE'
  2225.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2226.                     'SAY', cPrompt, 'COLOR', cClrBtA
  2227.   ? '            CASE pc_data = BN_UNHILITE'
  2228.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2229.                     'SAY', cPrompt, 'COLOR', cClrBtI
  2230.   ? '            CASE pc_data = BN_DEFAULT'
  2231.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2232.                     'SAY', cPrompt, 'COLOR', cClrBtD
  2233.   ? '            CASE pc_data = BN_DISABLE'
  2234.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2235.                     'SAY', cPrompt, 'COLOR', cClrBtN
  2236.         IF carry
  2237.   ? '            CASE pc_data = SE_SHADOW'
  2238.   ? '              @',TSTR(sys_flen+1)+', '+TSTR(length+1), ;
  2239.                     'SAY "' + REPLICATE( CHR( 223 ), LEN( &cPrompt ) ) + ;
  2240.                     '"' + ' COLOR ' + cClrDlg
  2241.   ? '              @',TSTR(sys_flen)+', '+TSTR(length+LEN(&cPrompt)), ;
  2242.                     'SAY "' + CHR(220) + '"' + ' COLOR ' + cClrDlg
  2243.   ? '            CASE pc_data = BN_PRESSED'
  2244.   ? '              @',TSTR(sys_flen+1)+', '+TSTR(length+1)
  2245.   ??                ' SAY SPACE(', TSTR( LEN( &cPrompt ) ), ')' + ;
  2246.                     ' COLOR ' + cClrDlg
  2247.   ? '              @',TSTR(sys_flen)+', '+TSTR(length)
  2248.   ??                ' SAY " "' + ' COLOR ' + cClrDlg
  2249.   ? '              @',TSTR(sys_flen)+', ' + TSTR(length + LEN( &cPrompt ) )
  2250.   ??                ' SAY " "' + ' COLOR ' + cClrDlg
  2251.   ? '              @',TSTR(sys_flen)+', '+TSTR(length+1)
  2252.   ??                ' SAY', cPrompt, 'COLOR', cClrBtA
  2253.        ENDIF
  2254.   ? '          ENDCASE'
  2255.         IF .NOT. ISBLANK( pickkey )
  2256.           nKeyPos = AT( "~", template )
  2257.   ? '          IF pc_data <> BN_PRESSED .AND. pc_data <> BN_DISABLE'
  2258.   ? '            @',TSTR(sys_flen)+', '+TSTR(length+nKeyPos-1), ;
  2259.                     'SAY "' + pickkey + '"', 'COLOR', cClrBtP
  2260.   ? '          ENDIF'
  2261.         ENDIF
  2262.  
  2263.   ? '        CASE pn_msg = BN_CLICKED'
  2264.         IF carry
  2265.   ? '          DO TButton WITH WM_PAINT, BN_PRESSED,', TSTR( RECNO() )
  2266.         ENDIF
  2267.         cOkCond = ok_cond
  2268.         DO CASE
  2269.           CASE fieldname = "BT_OK"
  2270.             IF .NOT. ISBLANK( cOkCond )
  2271.   ? '          IF', cOkCond
  2272.   ? '            nMess = DLN_OK'
  2273.   ? '          ENDIF'
  2274.   ? '          x = INKEY( .2 )'
  2275.             ELSE
  2276.   ? '          x = INKEY( .2 )'
  2277.   ? '          nMess = DLN_OK'
  2278.             ENDIF
  2279.  
  2280.           CASE fieldname = "BT_CANCEL"
  2281.             IF .NOT. ISBLANK( cOkCond )
  2282.   ? '          IF', cOkCond
  2283.   ? '            nMess = DLN_CANCEL'
  2284.   ? '          ENDIF'
  2285.   ? '          x = INKEY( .2 )'
  2286.             ELSE
  2287.   ? '          x = INKEY( .2 )'
  2288.   ? '          nMess = DLN_CANCEL'
  2289.             ENDIF
  2290.  
  2291.           CASE fieldname = "BT_HELP"
  2292. TEXT
  2293.           DO _HelpSys WITH cDialog, ;
  2294.                 LEFT( TRANSFORM( aObjPoint[ nCurrent ], "@L 99" ) + ;
  2295.                       aClkObj[ aObjPoint[ nCurrent ], 11 ], 10 ), ;
  2296.                 cHelpFile
  2297. ENDTEXT
  2298.  
  2299.           OTHERWISE
  2300.             IF .NOT. ISBLANK( cOkCond )
  2301. ?
  2302.               IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  2303.                 cDoExpr = SUBSTR( cOkCond, 3 )
  2304. ? '          *---------------------------------------'
  2305. ? '          *-- Do the program contained in DO() UDF'
  2306. ? '          *---------------------------------------'
  2307. ? '          DO', &cDoExpr
  2308.               ELSE
  2309. ? '          IF', ok_cond
  2310. ? '          ENDIF'
  2311.               ENDIF
  2312.             ENDIF
  2313. ?
  2314.         ENDCASE
  2315.         IF carry
  2316.   ? '          DO TButton WITH WM_PAINT, BN_PAINT,', TSTR( RECNO() )
  2317.   ? '          DO TButton WITH WM_PAINT, SE_SHADOW,', TSTR( RECNO() )
  2318.         ENDIF
  2319.   ? '      ENDCASE'
  2320.   ?
  2321.       CASE cClass = "RB_"
  2322.         IF ISBLANK( descript )
  2323.           nLen = decimals - col + 1
  2324.           cPrompt = template
  2325.           cPrompt = Delimit( LEFT( TRIM( cPrompt ) + SPACE( nLen ), nLen ) )
  2326.         ELSE
  2327.           nLen = decimals - col + 1
  2328.           cPrompt = SUBSTR( descript, 2 )
  2329.           cPrompt = TRIM( cPrompt )
  2330.           cPrompt = LEFT( cPrompt, LEN( cPrompt ) - 1 )
  2331.           cPrompt = LEFT( TRIM( cPrompt ) + SPACE( nLen ), nLen + 1 )
  2332.           cPrompt = Delimit( cPrompt )
  2333.         ENDIF
  2334.   ? '          DO CASE'
  2335.   ? '            CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE'
  2336.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2337.                     'SAY', cPrompt, 'COLOR', cClrCkI
  2338.   ? '              IF', cField
  2339.   ? '                @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2340.                       'TO', TSTR(sys_flen)+', '+TSTR(length+1)+ ' 7', ;
  2341.                       'COLOR', cClrCkI
  2342.   ? '              ELSE'
  2343.   ? '                @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2344.                       'SAY " " COLOR', cClrCkI
  2345.   ? '              ENDIF'
  2346.   ? '            CASE pc_data = BN_HILITE'
  2347.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2348.                     'SAY', cPrompt, 'COLOR', cClrCkA
  2349.   ? '              IF', cField
  2350.   ? '                @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2351.                       'TO', TSTR(sys_flen)+', '+TSTR(length+1)+ ' 7', ;
  2352.                       'COLOR', cClrCkA
  2353.   ? '              ELSE'
  2354.   ? '                @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2355.                       'SAY " " COLOR', cClrCkA
  2356.   ? '              ENDIF'
  2357.   ? '            CASE pc_data = BN_DISABLE'
  2358.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2359.                     'SAY', cPrompt, 'COLOR', cClrCkN
  2360.   ? '              IF', cField
  2361.   ? '                @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2362.                       'TO', TSTR(sys_flen)+', '+TSTR(length+1)+ ' 7', ;
  2363.                       'COLOR', cClrCkN
  2364.   ? '              ELSE'
  2365.   ? '                @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2366.                       'SAY " " COLOR', cClrCkN
  2367.   ? '              ENDIF'
  2368.   ? '          ENDCASE'
  2369.         IF .NOT. ISBLANK( pickkey )
  2370.           nKeyPos = AT( "~", template )
  2371.   ? '          IF pc_data <> BN_DISABLE'
  2372.   ? '            @',TSTR(sys_flen)+', '+TSTR(length+nKeyPos-1), ;
  2373.                     'SAY "' + pickkey + '"', 'COLOR', cClrCkP
  2374.   ? '          ENDIF'
  2375.         ENDIF
  2376.   ? '        CASE pn_msg = BN_CLICKED'
  2377.   ? '          IF', cField
  2378.   ? '            STORE .F. TO', cField
  2379.   ? '          ELSE'
  2380.   ? '            STORE .T. TO', cField
  2381.   ? '          ENDIF'
  2382.         cOkCond = ok_cond
  2383.         IF .NOT. ISBLANK( cOkCond )
  2384.   ?
  2385.           IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  2386.             cDoExpr = SUBSTR( cOkCond, 3 )
  2387.   ? '          *---------------------------------------'
  2388.   ? '          *-- Do the program contained in DO() UDF'
  2389.   ? '          *---------------------------------------'
  2390.   ? '          DO', &cDoExpr
  2391.           ELSE
  2392.   ? '          *-------------------------------'
  2393.   ? '          *-- Execute the VALID expression'
  2394.   ? '          *-------------------------------'
  2395.   ? '          IF', ok_cond
  2396.   ? '          ENDIF'
  2397.           ENDIF
  2398.         ENDIF
  2399.   ?
  2400.  
  2401.   ? '      ENDCASE'
  2402.       CASE cClass = "CK_"
  2403.         IF ISBLANK( descript )
  2404.           nLen = decimals - col + 1
  2405.           cPrompt = template
  2406.           cPrompt = Delimit( LEFT( TRIM( cPrompt ) + SPACE( nLen ), nLen ) )
  2407.         ELSE
  2408.           nLen = decimals - col + 1
  2409.           cPrompt = SUBSTR( descript, 2 )
  2410.           cPrompt = TRIM( cPrompt )
  2411.           cPrompt = LEFT( cPrompt, LEN( cPrompt ) - 1 )
  2412.           cPrompt = LEFT( TRIM( cPrompt ) + SPACE( nLen ), nLen + 1 )
  2413.           cPrompt = Delimit( cPrompt )
  2414.         ENDIF
  2415.   ? '          DO CASE'
  2416.   ? '            CASE pc_data = BN_PAINT .OR. pc_data = BN_UNHILITE'
  2417.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2418.                     'SAY', cPrompt, 'COLOR', cClrCkI
  2419.   ? '              @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2420.                     'SAY IIF(', cField, ', "X"," " ) COLOR', cClrCkI
  2421.   ? '            CASE pc_data = BN_HILITE'
  2422.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2423.                     'SAY', cPrompt, 'COLOR', cClrCkA
  2424.   ? '              @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2425.                     'SAY IIF(', cField, ', "X"," " ) COLOR', cClrCkA
  2426.   ? '            CASE pc_data = BN_DISABLE'
  2427.   ? '              @',TSTR(sys_flen)+', '+TSTR(length), ;
  2428.                     'SAY', cPrompt, 'COLOR', cClrCkN
  2429.   ? '              @',TSTR(sys_flen)+', '+TSTR(length+1), ;
  2430.                     'SAY IIF(', cField, ', "X"," " ) COLOR', cClrCkN
  2431.   ? '          ENDCASE'
  2432.         IF .NOT. ISBLANK( pickkey )
  2433.           nKeyPos = AT( "~", template )
  2434.   ? '          IF pc_data <> BN_DISABLE'
  2435.   ? '            @',TSTR(sys_flen)+', '+TSTR(length+nKeyPos-1), ;
  2436.                     'SAY "' + pickkey + '"', 'COLOR', cClrCkP
  2437.   ? '          ENDIF'
  2438.         ENDIF
  2439.   ? '        CASE pn_msg = BN_CLICKED'
  2440.   ? '          IF', cField
  2441.   ? '            STORE .F. TO', cField
  2442.   ? '          ELSE'
  2443.   ? '            STORE .T. TO', cField
  2444.   ? '          ENDIF'
  2445.         cOkCond = ok_cond
  2446.         IF .NOT. ISBLANK( cOkCond )
  2447.   ?
  2448.           IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  2449.             cDoExpr = SUBSTR( cOkCond, 3 )
  2450.   ? '          *---------------------------------------'
  2451.   ? '          *-- Do the program contained in DO() UDF'
  2452.   ? '          *---------------------------------------'
  2453.   ? '          DO', &cDoExpr
  2454.           ELSE
  2455.   ? '          *-------------------------------'
  2456.   ? '          *-- Execute the VALID expression'
  2457.   ? '          *-------------------------------'
  2458.   ? '          IF', ok_cond
  2459.   ? '          ENDIF'
  2460.           ENDIF
  2461.         ENDIF
  2462.   ?
  2463.   ? '          DO TButton WITH WM_PAINT, BN_HILITE,', TSTR( RECNO() )
  2464.   ? '      ENDCASE'
  2465.  
  2466.     ENDCASE
  2467.  
  2468.   ENDSCAN
  2469.  
  2470. TEXT
  2471.   ENDCASE
  2472.  
  2473. RETURN
  2474. *-- EOP: TButton WITH pn_msg, pc_data, pnObject
  2475.  
  2476. ENDTEXT
  2477.  
  2478. RETURN
  2479. *-- EOP: GTButton
  2480.  
  2481.  
  2482. PROCEDURE GGetEdit
  2483. *----------------------------------------------------------------------------
  2484. * NAME
  2485. *   GGetEdit -
  2486. *
  2487. * DESCRIPTION
  2488. *
  2489. *----------------------------------------------------------------------------
  2490. TEXT
  2491.  
  2492. PROCEDURE GetEdit
  2493. *----------------------------------------------------------------------------
  2494. * NAME
  2495. *   GetEdit -
  2496. *
  2497. * DESCRIPTION
  2498. *
  2499. *----------------------------------------------------------------------------
  2500.   PRIVATE lSkipRead
  2501.   lSkipRead = .F.
  2502.   nMess = 0
  2503.   nAccel = 0
  2504.  
  2505.   nMsEvent = 0
  2506.   ON MOUSE DO MsHand WITH MROW(), MCOL()
  2507.   DO SetOnKey
  2508.  
  2509.   DO CASE
  2510. ENDTEXT
  2511.  
  2512.   SET ORDER TO ObjOrder
  2513.   SET FILTER TO
  2514.   SCAN FOR currentid > 0 .AND. ;
  2515.            LEFT( fieldname, 3 ) $ "EF_,CS_" .AND. ;
  2516.            RIGHT( TRIM( fieldname ), 2 ) <> "_0"
  2517. ? '    CASE nCurrent =', TSTR( RECNO() )
  2518.     IF pic_scroll > 0
  2519.       cPict = "'@S" + TSTR( LEN( TRIM( template ) ) ) + "'"
  2520.     ELSE
  2521.       cPict = '"' + TRIM( template ) + '"'
  2522.     ENDIF
  2523. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length ) + ' GET '
  2524. ?? TRIM( fieldname ), 'PICTURE', cPict
  2525.     IF LEFT( fieldname, 3 ) = "CS_"
  2526.       nRecNo = RECNO()
  2527.       cField = fieldname
  2528.       i = 1
  2529.       SCAN FOR value_type = "B" .AND. LEFT( fieldname, 3 ) $ "CS_,LB_,UD_"
  2530.         IF cField = fieldname
  2531. ? '      IF aClkBox[', TSTR( i ), ',6 ]'
  2532. ? '        lSkipRead = .T.'
  2533. ? '        aClkBox[', TSTR( i ), ',6 ] = .F.'
  2534. ? '      ENDIF'
  2535.           EXIT
  2536.         ENDIF
  2537.         i = i + 1
  2538.       ENDSCAN
  2539.       GOTO nRecNo
  2540.     ENDIF
  2541.   ENDSCAN
  2542.  
  2543. TEXT
  2544.   ENDCASE
  2545.  
  2546.   IF .NOT. lSkipRead
  2547.     SET CURSOR ON
  2548.     READ
  2549.     SET CURSOR OFF
  2550.   ENDIF
  2551.  
  2552.   DO ClrOnKey
  2553.   ON MOUSE
  2554.  
  2555.   IF .NOT. lSkipRead
  2556.     IF nMsEvent = KB_MOUSE
  2557.       nMess = KB_MOUSE
  2558.     ELSE
  2559.       nMess = LASTKEY()
  2560.     ENDIF
  2561.   ELSE
  2562.     nMess = KB_DOWNARROW
  2563.   ENDIF
  2564.  
  2565. RETURN
  2566. *-- EOP: GetEdit
  2567.  
  2568. ENDTEXT
  2569.  
  2570. RETURN
  2571. *-- EOP: GGetEdit
  2572.  
  2573.  
  2574. PROCEDURE GTEdit
  2575. *----------------------------------------------------------------------------
  2576. * NAME
  2577. *   GTEdit -
  2578. *
  2579. * DESCRIPTION
  2580. *
  2581. *----------------------------------------------------------------------------
  2582.  
  2583. TEXT
  2584.  
  2585. PROCEDURE TEdit
  2586. PARAMETERS pn_msg, p__data, pnObject
  2587. *----------------------------------------------------------------------------
  2588. * NAME
  2589. *   TEdit -
  2590. *
  2591. * DESCRIPTION
  2592. *
  2593. * PARAMETERS
  2594. *   pn_msg     =
  2595. *   p__data    =
  2596. *   pnObject   =
  2597. *
  2598. *----------------------------------------------------------------------------
  2599.   DO CASE
  2600. ENDTEXT
  2601.   SET ORDER TO ObjOrder
  2602.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "EF_,CS_"
  2603.     cClass = LEFT( fieldname, 3 )
  2604.     cField = TRIM( fieldname )
  2605. ? '    CASE pnObject =', TSTR( RECNO() )
  2606. ?? "&"+"&" AT 41, cField
  2607. ? '      DO CASE'
  2608. ? '        CASE p__data = EN_KILLFOC'
  2609.     IF pic_scroll > 0
  2610.       cPict = "'@S"+LTRIM(STR(pic_scroll))+" "+TRIM(template)+ "'"
  2611.     ELSE
  2612.       cPict = '"' + TRIM( template ) + '"'
  2613.     ENDIF
  2614. ? '          @', TSTR( sys_flen ) + ', ' + TSTR( length ) + ' GET '
  2615. ?? cField, 'PICTURE', cPict
  2616. ? '          CLEAR GETS'
  2617. ? '      ENDCASE'
  2618. ?
  2619.   ENDSCAN
  2620.  
  2621. TEXT
  2622.  
  2623.   ENDCASE
  2624.  
  2625. RETURN
  2626. *-- EOP: TEdit WITH pn_msg, p__data, pnObject
  2627.  
  2628. ENDTEXT
  2629.  
  2630. RETURN
  2631. *-- EOP: GTEdit
  2632.  
  2633.  
  2634. PROCEDURE GSetOnKey
  2635. *----------------------------------------------------------------------------
  2636. * NAME
  2637. *   GSetOnKey -
  2638. *
  2639. * DESCRIPTION
  2640. *
  2641. *----------------------------------------------------------------------------
  2642.  
  2643. TEXT
  2644. PROCEDURE SetOnKey
  2645. *----------------------------------------------------------------------------
  2646. * NAME
  2647. *   SetOnKey - For each pick key, set on key label
  2648. *
  2649. * DESCRIPTION
  2650. *
  2651. *----------------------------------------------------------------------------
  2652.  
  2653. ENDTEXT
  2654.  
  2655.   SCAN FOR .NOT. ISBLANK( pickkey )
  2656.     cAltKey = "Alt-" + pickkey
  2657.     IF RIGHT( TRIM( fieldname ), 2 ) = "_0"
  2658.       cRec = "'" + LTRIM( STR( previd ) ) + "'"
  2659.     ELSE
  2660.       cRec = "'" + LTRIM( STR( currentid ) ) + "'"
  2661.     ENDIF
  2662.  
  2663. ? '  ON KEY LABEL', cAltKey, 'DO AKeyHand WITH', cRec
  2664.   ENDSCAN
  2665.  
  2666. TEXT
  2667.  
  2668. RETURN
  2669. *-- EOP: SetOnKey
  2670.  
  2671. ENDTEXT
  2672.  
  2673. RETURN
  2674. *-- EOP: GSetOnKey
  2675.  
  2676.  
  2677. PROCEDURE GClrOnKey
  2678. *----------------------------------------------------------------------------
  2679. * NAME
  2680. *   GClrOnKey -
  2681. *
  2682. * DESCRIPTION
  2683. *
  2684. *----------------------------------------------------------------------------
  2685. TEXT
  2686.  
  2687. PROCEDURE ClrOnKey
  2688. *----------------------------------------------------------------------------
  2689. * NAME
  2690. *   ClrOnKey - For each pick key, clear on label
  2691. *
  2692. * DESCRIPTION
  2693. *
  2694. *----------------------------------------------------------------------------
  2695.  
  2696. ENDTEXT
  2697.  
  2698.   SCAN FOR .NOT. ISBLANK( pickkey )
  2699.     cAltKey = "Alt-" + pickkey
  2700.  
  2701. ? '  ON KEY LABEL', cAltKey
  2702.   ENDSCAN
  2703.  
  2704. TEXT
  2705.  
  2706. RETURN
  2707. *-- EOP: ClrOnKey
  2708.  
  2709. ENDTEXT
  2710.  
  2711. RETURN
  2712. *-- EOP: GClrOnKey
  2713.  
  2714.  
  2715. PROCEDURE GAKeyHand
  2716. *----------------------------------------------------------------------------
  2717. * NAME
  2718. *   GAKeyHand -
  2719. *
  2720. * DESCRIPTION
  2721. *
  2722. *----------------------------------------------------------------------------
  2723. TEXT
  2724.  
  2725. PROCEDURE AKeyHand
  2726. PARAMETERS cId
  2727. *----------------------------------------------------------------------------
  2728. * NAME
  2729. *   AKeyHand - On key handler for Accel key from popup or get
  2730. *
  2731. * DESCRIPTION
  2732. *
  2733. * PARAMETERS
  2734. *   nId        =
  2735. *
  2736. *----------------------------------------------------------------------------
  2737.  
  2738.   IF nAccel <> nCurrent
  2739.     nAccel = VAL( cId )
  2740. ENDTEXT
  2741.  
  2742.  
  2743.   IF cd .OR. cs .OR. cl .OR. lb .OR. ud
  2744. ? '    IF TYPE( "pl_IsPop" ) = "L" .AND. pl_IsPop'
  2745. ? '      DO CASE'
  2746.     SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "CD_,CS_,CL_,LB_,UD_"
  2747.       cField = TRIM( fieldname )
  2748.       cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  2749. ? '        CASE nCurrent =', TSTR( RECNO() )
  2750.       IF LEFT( fieldname, 3 ) <> "UD_"
  2751. ? '          STORE BAR() TO', cVar
  2752. ? '          SAVE SCREEN TO', cField
  2753. ? '          KEYBOARD "{LeftArrow}"'
  2754. ? '          nMess = KB_ENTER'
  2755.       ELSE
  2756.         cOkCond = ok_cond
  2757.         cOkCond = TRIM( cOkCond )
  2758.         IF .NOT. ISBLANK( cOkCond )
  2759. ? '          IF', cOkCond
  2760. ? '          ENDIF'
  2761.         ENDIF
  2762.       ENDIF
  2763.     ENDSCAN
  2764. ? '        OTHERWISE'
  2765. ? '          KEYBOARD "{Ctrl-W}"'
  2766. ? '          nMess = KB_CTRLW'
  2767. ? '    ENDCASE'
  2768. ? '  ELSE'
  2769. ? '    KEYBOARD "{Ctrl-W}"'
  2770. ? '    nMess = KB_CTRLW'
  2771. ? '  ENDIF'
  2772.  
  2773.   ELSE
  2774.  
  2775. TEXT
  2776.     KEYBOARD "{Ctrl-W}"
  2777.     nMess = KB_CTRLW
  2778. ENDTEXT
  2779.  
  2780.   ENDIF
  2781.  
  2782. TEXT
  2783.   ELSE
  2784.     nAccel = 0
  2785.   ENDIF
  2786.  
  2787. RETURN
  2788. *-- EOP: AKeyHand WITH nId
  2789.  
  2790. ENDTEXT
  2791.  
  2792. RETURN
  2793. *-- EOP: GAKeyHand
  2794.  
  2795.  
  2796. PROCEDURE GReleObjs
  2797. *----------------------------------------------------------------------------
  2798. * NAME
  2799. *   GReleObjs -
  2800. *
  2801. * DESCRIPTION
  2802. *
  2803. *----------------------------------------------------------------------------
  2804.   SET ORDER TO ObjOrder
  2805.   SET FILTER TO currentid > 0 .AND. ;
  2806.                 LEFT( TRIM( fieldname ), 3 ) $ "LB_,UD_,CS_,CL_,CD_" .AND. ;
  2807.                 RIGHT( TRIM( fieldname ), 2 ) = "_1"
  2808.   GO TOP
  2809. TEXT
  2810. PROCEDURE ReleObjs
  2811. *----------------------------------------------------------------------------
  2812. * NAME
  2813. *   ReleObjs - Scan the design DBF file and release the object variables
  2814. *
  2815. * DESCRIPTION
  2816. *
  2817. *----------------------------------------------------------------------------
  2818. ENDTEXT
  2819.   IF .NOT. EOF()
  2820.     SCAN
  2821.       cField = TRIM( fieldname )
  2822.  
  2823.       IF LEFT( fieldname, 3 ) = "UD_"
  2824.  
  2825. ? '  RELEASE WINDOW', cField
  2826.  
  2827.       ELSE
  2828.  
  2829. ? '  RELEASE POPUP', cField
  2830.  
  2831.       ENDIF
  2832.  
  2833.     ENDSCAN
  2834.   ENDIF
  2835.  
  2836. TEXT
  2837.  
  2838. RETURN
  2839. *-- EOP: ReleObjs
  2840.  
  2841. ENDTEXT
  2842.  
  2843.   SET FILTER TO
  2844.  
  2845. RETURN
  2846. *-- EOP: GReleObjs
  2847.  
  2848.  
  2849. PROCEDURE GDispatch
  2850. *----------------------------------------------------------------------------
  2851. * NAME
  2852. *   GDispatch -
  2853. *
  2854. * DESCRIPTION
  2855. *
  2856. *----------------------------------------------------------------------------
  2857.  
  2858. TEXT
  2859.  
  2860. PROCEDURE Dispatch
  2861. *----------------------------------------------------------------------------
  2862. * NAME
  2863. *   Dispatch -
  2864. *
  2865. * DESCRIPTION
  2866. *
  2867. *----------------------------------------------------------------------------
  2868. ENDTEXT
  2869.  
  2870. ? '  DO CASE'
  2871.   SET ORDER TO ObjOrder
  2872.   SCAN FOR currentid > 0
  2873.     cClass = LEFT( fieldname, 3 )
  2874.     cField = TRIM( fieldname )
  2875. ? '    CASE nCurrent =', TSTR( RECNO() )
  2876. ?? "&"+"&" AT 41, cField
  2877.     DO CASE
  2878.       CASE cClass = "BT_"
  2879. ? '      DO DispBt'
  2880.       CASE cClass = "EF_"
  2881. ? '      DO DispEf'
  2882.       CASE cClass = "CK_"
  2883. ? '      DO DispCk'
  2884.       CASE cClass = "RB_"
  2885. ? '      DO DispRb'
  2886.       CASE cClass = "LB_"
  2887. ? '      DO DispLb'
  2888.       CASE cClass = "UD_"
  2889. ? '      DO DispUd'
  2890.       CASE cClass = "CD_"
  2891. ? '      DO DispCD'
  2892.       CASE cClass = "CS_"
  2893. ? '      DO DispCS'
  2894.       CASE cClass = "CL_"
  2895. ? '      DO DispCL'
  2896.     ENDCASE
  2897.  
  2898.   ENDSCAN
  2899.  
  2900. ? '  ENDCASE'
  2901.  
  2902. TEXT
  2903.  
  2904. RETURN
  2905. *-- EOP: Dispatch
  2906.  
  2907. ENDTEXT
  2908.  
  2909. RETURN
  2910. *-- EOP: GDispatch
  2911.  
  2912.  
  2913. PROCEDURE GDisp
  2914. *----------------------------------------------------------------------------
  2915. * NAME
  2916. *   GDisp -
  2917. *
  2918. * DESCRIPTION
  2919. *
  2920. *----------------------------------------------------------------------------
  2921. IF rb
  2922.  
  2923. TEXT
  2924.  
  2925. PROCEDURE DispRb
  2926. *----------------------------------------------------------------------------
  2927. * NAME
  2928. *   DispRb -
  2929. *
  2930. * DESCRIPTION
  2931. *
  2932. *----------------------------------------------------------------------------
  2933.   PRIVATE nPossNext
  2934.  
  2935.   DO CASE
  2936.     CASE nMess = KB_TAB
  2937.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2938.       DO GetNext WITH .T.
  2939.     CASE nMess = KB_SHIFTTAB
  2940.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2941.       DO GetNext WITH .F.
  2942.     CASE nMess = KB_UPARROW .OR. nMess = KB_LEFTARROW
  2943.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2944.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2945.       DO GetNext WITH .F., .T.
  2946.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2947.     CASE nMess = KB_DOWNARROW .OR. nMess = KB_RTARROW
  2948.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2949.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2950.       DO GetNext WITH .T., .T.
  2951.       DO TButton WITH BN_CLICKED, .F., nCurrent
  2952.  
  2953.     CASE nMess = KB_MOUSE
  2954.       nPossNext = GetMsTo()
  2955.       IF nPossNext > 0
  2956.         IF nPossNext <> nCurrent
  2957.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2958.           DO GetNext WITH nPossNext, .F.
  2959.         ENDIF
  2960.       ENDIF
  2961.  
  2962.     CASE nMess = KB_ENTER
  2963.       IF nDlgDef > 0
  2964.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  2965.       ENDIF
  2966.  
  2967.     OTHERWISE
  2968.       DO CkWaitAc
  2969.       IF nAccel > 0
  2970.         IF nAccel <> nCurrent
  2971.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  2972.           DO GetNext WITH nAccel, .F.
  2973.         ENDIF
  2974.       ENDIF
  2975.  
  2976.   ENDCASE
  2977.  
  2978. RETURN
  2979. *-- EOP: DispRb
  2980.  
  2981. ENDTEXT
  2982.  
  2983. ENDIF && Rb
  2984.  
  2985. IF Ck
  2986.  
  2987. TEXT
  2988.  
  2989. PROCEDURE DispCk
  2990. *----------------------------------------------------------------------------
  2991. * NAME
  2992. *   DispCk -
  2993. *
  2994. * DESCRIPTION
  2995. *
  2996. *----------------------------------------------------------------------------
  2997.   PRIVATE nPossNext
  2998.  
  2999.   DO CASE
  3000.     CASE nMess = KB_TAB
  3001.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3002.       DO GetNext WITH .T.
  3003.     CASE nMess = KB_SHIFTTAB
  3004.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3005.       DO GetNext WITH .F.
  3006.     CASE nMess = KB_UPARROW .OR. nMess = KB_LEFTARROW
  3007.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3008.       DO GetNext WITH .F., .T.
  3009.     CASE nMess = KB_DOWNARROW .OR. nMess = KB_RTARROW
  3010.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3011.       DO GetNext WITH .T., .T.
  3012.     CASE nMess = KB_SPACE
  3013.       DO TButton WITH BN_CLICKED, .F., nCurrent
  3014.  
  3015.     CASE nMess = KB_MOUSE
  3016.       nPossNext = GetMsTo()
  3017.       IF nPossNext > 0
  3018.         IF nPossNext = nCurrent
  3019.           DO TButton WITH BN_CLICKED, .F., nCurrent
  3020.         ELSE
  3021.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3022.           DO GetNext WITH nPossNext, .F.
  3023.         ENDIF
  3024.       ENDIF
  3025.  
  3026.     CASE nMess = KB_ENTER
  3027.       IF nDlgDef > 0
  3028.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  3029.       ENDIF
  3030.  
  3031.     OTHERWISE
  3032.       DO CkWaitAc
  3033.       IF nAccel > 0
  3034.         IF nAccel = nCurrent
  3035.           DO TButton WITH BN_CLICKED, .F., nCurrent
  3036.         ELSE
  3037.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3038.           DO GetNext WITH nAccel, .F.
  3039.         ENDIF
  3040.       ENDIF
  3041.  
  3042.   ENDCASE
  3043.  
  3044. RETURN
  3045. *-- EOP: DispCk
  3046.  
  3047. ENDTEXT
  3048.  
  3049. ENDIF && Ck
  3050.  
  3051. IF bt
  3052. TEXT
  3053.  
  3054. PROCEDURE DispBt
  3055. *----------------------------------------------------------------------------
  3056. * NAME
  3057. *   DispBt -
  3058. *
  3059. * DESCRIPTION
  3060. *
  3061. *----------------------------------------------------------------------------
  3062.   PRIVATE nPossNext
  3063.   DO CASE
  3064.     CASE nMess = KB_TAB
  3065.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3066.       DO GetNext WITH .T.
  3067.     CASE nMess = KB_SHIFTTAB
  3068.       DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3069.       DO GetNext WITH .F.
  3070.     CASE nMess = KB_ENTER
  3071.       DO TButton WITH BN_CLICKED, .F., nCurrent
  3072.     CASE nMess = KB_MOUSE
  3073.       nPossNext = GetMsTo()
  3074.       IF nPossNext > 0
  3075.         IF nPossNext = nCurrent
  3076.           DO TButton WITH BN_CLICKED, .F., nCurrent
  3077.         ELSE
  3078.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3079.           DO GetNext WITH nPossNext, .F.
  3080.         ENDIF
  3081.       ENDIF
  3082.     OTHERWISE
  3083.       DO CkWaitAc
  3084.       IF nAccel > 0
  3085.         IF nAccel = nCurrent
  3086.           DO TButton WITH BN_CLICKED, .F., nCurrent
  3087.         ELSE
  3088.           DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent
  3089.           DO GetNext WITH nAccel, .F.
  3090.         ENDIF
  3091.       ENDIF
  3092.   ENDCASE
  3093.  
  3094. RETURN
  3095. *-- EOP: DispBt
  3096.  
  3097. ENDTEXT
  3098.  
  3099. ENDIF && Bt
  3100.  
  3101. IF ef
  3102. TEXT
  3103.  
  3104. PROCEDURE DispEf
  3105. *----------------------------------------------------------------------------
  3106. * NAME
  3107. *   DispEf -
  3108. *
  3109. * DESCRIPTION
  3110. *
  3111. *----------------------------------------------------------------------------
  3112.   PRIVATE nPossNext
  3113.   DO CASE
  3114.     CASE nMess = KB_TAB
  3115.       DO GetNext WITH .T.
  3116.     CASE nMess = KB_SHIFTTAB
  3117.       DO GetNext WITH .F.
  3118.     CASE nMess = KB_ENTER
  3119.       IF nDlgDef > 0
  3120.         DO GetNext WITH nDlgDef
  3121.         IF nCurrent = nDlgDef
  3122.           DO TButton WITH BN_CLICKED, .F., nDlgDef
  3123.         ENDIF
  3124.       ENDIF
  3125.     CASE nMess = KB_UPARROW
  3126.       DO GetNext WITH .F., .T.
  3127.     CASE nMess = KB_DOWNARROW
  3128.       DO GetNext WITH .T., .T.
  3129.     CASE nMess = KB_MOUSE
  3130.       nPossNext = GetMsTo()
  3131.       IF nPossNext > 0
  3132.         DO GetNext WITH nPossNext, .F.
  3133.       ENDIF
  3134.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  3135.       DO GetNext WITH nAccel, .F.
  3136.   ENDCASE
  3137.  
  3138. RETURN
  3139. *-- EOP: DispEf
  3140.  
  3141. ENDTEXT
  3142.  
  3143. ENDIF
  3144.  
  3145. IF lb
  3146.  
  3147. TEXT
  3148. PROCEDURE DispLb
  3149. *----------------------------------------------------------------------------
  3150. * NAME
  3151. *   DispLb -
  3152. *
  3153. * DESCRIPTION
  3154. *
  3155. *----------------------------------------------------------------------------
  3156.   PRIVATE nPossNext
  3157.  
  3158.   DO CASE
  3159.     CASE nMess = KB_TAB
  3160.       DO GetNext WITH .T.
  3161.     CASE nMess = KB_SHIFTTAB
  3162.       DO GetNext WITH .F.
  3163.     CASE nMess = KB_MOUSE
  3164.       nPossNext = GetMsTo()
  3165.       IF nPossNext > 0
  3166.         DO GetNext WITH nPossNext, .F.
  3167.       ENDIF
  3168.     CASE nAccel > 0                     && dBRIEF Tag...
  3169.       DO GetNext WITH nAccel, .F.
  3170.     CASE nMess = KB_ENTER
  3171.       IF nDlgDef > 0
  3172.         DO GetNext WITH nDlgDef
  3173.         IF nCurrent = nDlgDef
  3174.           DO TButton WITH BN_CLICKED, .F., nDlgDef
  3175.         ENDIF
  3176.       ENDIF
  3177.   ENDCASE
  3178.  
  3179. RETURN
  3180. *-- EOP: DispLb
  3181.  
  3182. ENDTEXT
  3183.  
  3184. ENDIF && lb
  3185.  
  3186. IF ud
  3187.  
  3188. TEXT
  3189. PROCEDURE DispUd
  3190. *----------------------------------------------------------------------------
  3191. * NAME
  3192. *   DispUd -
  3193. *
  3194. * DESCRIPTION
  3195. *
  3196. *----------------------------------------------------------------------------
  3197.   PRIVATE nPossNext
  3198.  
  3199.   DO CASE
  3200.     CASE nMess = KB_TAB
  3201.       DO GetNext WITH .T.
  3202.     CASE nMess = KB_SHIFTTAB
  3203.       DO GetNext WITH .F.
  3204.     CASE nMess = KB_MOUSE
  3205.       nPossNext = GetMsTo()
  3206.       IF nPossNext > 0
  3207.         DO GetNext WITH nPossNext, .F.
  3208.       ENDIF
  3209.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  3210.       DO GetNext WITH nAccel, .F.
  3211.     CASE nMess = KB_ENTER
  3212.       IF nDlgDef > 0
  3213.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  3214. ENDTEXT
  3215.  
  3216.   SET FILTER TO currentid > 0                 .AND. ;
  3217.                 LEFT( fieldname, 3 ) = "UD_"  .AND. ;
  3218.                 .NOT. ISBLANK( ok_cond )
  3219.   GO TOP
  3220.   IF .NOT. EOF()
  3221. ? '      ELSE'
  3222. ? '        DO CASE'
  3223.     SCAN
  3224. ? '          CASE nCurrent =', TSTR( RECNO() )
  3225. ?? '&'+'& Validation for:', TRIM( fieldname )
  3226.       cOkCond = ok_cond
  3227.       IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  3228.         *-- cDoExpr = '("TVDIAL")'
  3229.         cDoExpr = SUBSTR( cOkCond, 3 )
  3230. ? '            DO', &cDoExpr
  3231.       ELSE
  3232. ? '            IF', ok_cond
  3233. ? '            ENDIF'
  3234.       ENDIF
  3235.     ENDSCAN
  3236. ? '        ENDCASE'
  3237.   endif
  3238. TEXT
  3239.       ENDIF
  3240.   ENDCASE
  3241.  
  3242. RETURN
  3243. *-- EOP: DispUd
  3244.  
  3245. ENDTEXT
  3246.  
  3247. ENDIF && Ud
  3248.  
  3249. IF cs
  3250.  
  3251. TEXT
  3252.  
  3253. PROCEDURE DispCS
  3254. *----------------------------------------------------------------------------
  3255. * NAME
  3256. *   DispCS -
  3257. *
  3258. * DESCRIPTION
  3259. *
  3260. *----------------------------------------------------------------------------
  3261.  
  3262.   DO CASE
  3263.     CASE nMess = KB_TAB
  3264.       DO GetNext WITH .T.
  3265.     CASE nMess = KB_SHIFTTAB
  3266.       DO GetNext WITH .F.
  3267.     CASE nMess = KB_ENTER
  3268.       IF nDlgDef > 0
  3269.         DO GetNext WITH nDlgDef
  3270.         IF nCurrent = nDlgDef
  3271.           DO TButton WITH BN_CLICKED, .F., nDlgDef
  3272.         ENDIF
  3273.       ENDIF
  3274.  
  3275.     CASE nMess = KB_DOWNARROW .OR. ;
  3276.          nMess = KB_UPARROW
  3277. ENDTEXT
  3278.  
  3279.   SET FILTER TO currentid > 1       .AND. ;
  3280.       LEFT( fieldname, 3 ) = "CS_"  .AND. ;
  3281.       .NOT. ISBLANK( ok_cond )
  3282.   GO TOP
  3283.   IF .NOT. EOF()
  3284. TEXT
  3285.       *-----------------------------------------------
  3286.       *-- GENCODE - Do VALID code here from Memo field
  3287.       *-----------------------------------------------
  3288.       DO CASE
  3289. ENDTEXT
  3290.     SCAN
  3291.       cClass = LEFT( fieldname, 3 )
  3292.       cField = TRIM( fieldname )
  3293.  
  3294. ? '        CASE nCurrent =', TSTR( RECNO() )
  3295. ?? "&"+"&" AT 41, cField
  3296.       cOkCond = ok_cond
  3297.       IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  3298.         *-- cDoExpr = '("TVDIAL")'
  3299.         cDoExpr = SUBSTR( cOkCond, 3 )
  3300. ? '            DO', &cDoExpr
  3301.       ELSE
  3302. ? '            IF', ok_cond
  3303. ? '            ENDIF'
  3304.       ENDIF
  3305.     ENDSCAN
  3306.  
  3307. ? '      ENDCASE'
  3308.   ENDIF
  3309.   SET FILTER TO
  3310.  
  3311. TEXT
  3312.  
  3313.       DO TCombo WITH CBN_INLIST, .F., nCurrent
  3314.  
  3315.       IF nMsEvent = KB_MOUSE
  3316.         nPossNext = GetMsTo()
  3317.       ELSE
  3318.         IF nAccel > 0
  3319.           DO GetNext WITH nAccel
  3320.           RETURN
  3321.         ELSE
  3322.           nPossNext = 0
  3323.           DO CASE
  3324. ENDTEXT
  3325.       i = 1
  3326.       SCAN FOR value_type = "B" .AND. LEFT( fieldname, 3 ) $ "CS_,LB_,UD_"
  3327.         IF LEFT( fieldname, 3 ) = "CS_"
  3328. ? '            CASE nCurrent =', TSTR( RECNO() - 1 )
  3329. ? '              aClkBox[', TSTR( i ), ',6 ] = .F.'
  3330.         ENDIF
  3331.         i = i + 1
  3332.       ENDSCAN
  3333.  
  3334. TEXT
  3335.           ENDCASE
  3336.         ENDIF
  3337.       ENDIF
  3338.  
  3339.       nLastKey = LASTKEY()
  3340.       IF nLastKey = KB_ENTER
  3341.         IF nDlgDef > 0
  3342.           DO GetNext WITH nDlgDef
  3343.           IF nCurrent = nDlgDef
  3344.             DO TButton WITH BN_CLICKED, .F., nDlgDef
  3345.           ENDIF
  3346.         ENDIF
  3347.       ENDIF
  3348.  
  3349.       IF nPossNext > 0
  3350.         IF nPossNext <> nCurrent
  3351.           *-- User clicked to another field
  3352.           DO GetNext WITH nPossNext
  3353.         ELSE
  3354.           nMess = 0
  3355.         ENDIF
  3356.       ELSE
  3357.         DO CASE
  3358.           CASE nMess = KB_TAB
  3359.             DO GetNext WITH .T.
  3360.           CASE nMess = KB_SHIFTTAB
  3361.             DO GetNext WITH .F.
  3362.         ENDCASE
  3363.       ENDIF
  3364.  
  3365.     CASE nMess = KB_MOUSE
  3366.       nPossNext = GetMsTo()
  3367.       IF nPossNext > 0
  3368.         IF nPossNext <> nCurrent
  3369.           *-- User clicked to another field
  3370.           DO GetNext WITH nPossNext
  3371.         ELSE
  3372.           *-- User clicked inside of list box
  3373.           DO TCombo WITH CBN_INLIST, .F., nCurrent
  3374.  
  3375.           DO CASE
  3376. ENDTEXT
  3377.       i = 1
  3378.       SCAN FOR value_type = "B" .AND. LEFT( fieldname, 3 ) $ "CS_,LB_,UD_"
  3379.         IF LEFT( fieldname, 3 ) = "CS_"
  3380. ? '            CASE nCurrent =', TSTR( RECNO() - 1 )
  3381. ? '              aClkBox[', TSTR( i ), ',6 ] = .F.'
  3382.         ENDIF
  3383.         i = i + 1
  3384.       ENDSCAN
  3385.  
  3386. TEXT
  3387.           ENDCASE
  3388.           IF nMsEvent = KB_MOUSE
  3389.             nPossNext = GetMsTo()
  3390.           ELSE
  3391.             IF nAccel > 0
  3392.               DO GetNext WITH nAccel
  3393.               RETURN
  3394.             ELSE
  3395.               nPossNext = 0
  3396.             ENDIF
  3397.           ENDIF
  3398.  
  3399.           nLastKey = LASTKEY()
  3400.           IF nLastKey = KB_ENTER
  3401.             IF nDlgDef > 0
  3402.               DO TButton WITH BN_CLICKED, .F., nDlgDef
  3403.               RETURN
  3404.             ENDIF
  3405.           ENDIF
  3406.  
  3407.           IF nPossNext > 0
  3408.             IF nPossNext <> nCurrent
  3409.               *-- User clicked to another field
  3410.               DO GetNext WITH nPossNext
  3411.             ELSE
  3412.               nMess = 0
  3413.             ENDIF
  3414.           ELSE
  3415.             DO CASE
  3416.               CASE nMess = KB_TAB
  3417.                 DO GetNext WITH .T.
  3418.               CASE nMess = KB_SHIFTTAB
  3419.                 DO GetNext WITH .F.
  3420.             ENDCASE
  3421.           ENDIF
  3422.         ENDIF
  3423.       ENDIF
  3424.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  3425.       DO GetNext WITH nAccel
  3426.  
  3427.     OTHERWISE
  3428.       DO CkWaitAc
  3429.       IF nAccel > 0
  3430.         IF nAccel <> nCurrent
  3431.           DO GetNext WITH nAccel
  3432.         ENDIF
  3433.       ENDIF
  3434.  
  3435.   ENDCASE
  3436.  
  3437. RETURN
  3438. *-- EOP: DispCS
  3439.  
  3440. ENDTEXT
  3441.  
  3442. ENDIF
  3443.  
  3444. IF cd
  3445.  
  3446. TEXT
  3447.  
  3448. PROCEDURE DispCD
  3449. *----------------------------------------------------------------------------
  3450. * NAME
  3451. *   DispCD -
  3452. *
  3453. * DESCRIPTION
  3454. *
  3455. *----------------------------------------------------------------------------
  3456.  
  3457.   DO CASE
  3458.     CASE nMess = KB_TAB
  3459.       DO GetNext WITH .T.
  3460.     CASE nMess = KB_SHIFTTAB
  3461.       DO GetNext WITH .F.
  3462.     CASE nMess = KB_MOUSE
  3463.       nPossNext = GetMsTo()
  3464.       IF nPossNext = nCurrent
  3465.         nMess = KB_UPARROW
  3466.         DO DispCD                       && Make a recursive call
  3467.       ELSE
  3468.         IF nPossNext > 0
  3469.           DO GetNext WITH nPossNext
  3470.         ENDIF
  3471.       ENDIF
  3472.  
  3473.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  3474.       DO GetNext WITH nAccel
  3475.  
  3476.     CASE nMess = KB_ENTER
  3477.       IF nDlgDef > 0
  3478.         DO GetNext WITH nDlgDef
  3479.         IF nCurrent = nDlgDef
  3480.           DO TButton WITH BN_CLICKED, .F., nDlgDef
  3481.         ENDIF
  3482.       ENDIF
  3483.  
  3484.     CASE nMess = KB_DOWNARROW .OR. ;
  3485.          nMess = KB_UPARROW
  3486.  
  3487.       DO TCombo WITH CBN_DROPDOW, .F., nCurrent
  3488.  
  3489. ENDTEXT
  3490.  
  3491.   SET FILTER TO currentid > 1       .AND. ;
  3492.       LEFT( fieldname, 3 ) = "CD_"  .AND. ;
  3493.       .NOT. ISBLANK( ok_cond )
  3494.   GO TOP
  3495.   IF .NOT. EOF()
  3496. TEXT
  3497.       *-----------------------------------------------
  3498.       *-- GENCODE - Do VALID code here from Memo field
  3499.       *-----------------------------------------------
  3500.       DO CASE
  3501. ENDTEXT
  3502.     SCAN
  3503.       cClass = LEFT( fieldname, 3 )
  3504.       cField = TRIM( fieldname )
  3505.  
  3506. ? '        CASE nCurrent =', TSTR( RECNO() )
  3507. ?? "&"+"&" AT 41, cField
  3508.       cOkCond = ok_cond
  3509.       IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  3510.         *-- cDoExpr = '("TVDIAL")'
  3511.         cDoExpr = SUBSTR( cOkCond, 3 )
  3512. ? '            DO', &cDoExpr
  3513.       ELSE
  3514. ? '            IF', ok_cond
  3515. ? '            ENDIF'
  3516.       ENDIF
  3517.     ENDSCAN
  3518.  
  3519. ? '      ENDCASE'
  3520.   ENDIF
  3521.   SET FILTER TO
  3522.  
  3523. TEXT
  3524.       IF nMsEvent = KB_MOUSE
  3525.         nPossNext = GetMsTo()
  3526.         IF nPossNext > 0
  3527.           IF nPossNext <> nCurrent
  3528.             *-- User clicked to another field
  3529.             DO GetNext WITH nPossNext
  3530.           ENDIF
  3531.         ENDIF
  3532.       ELSE
  3533.         DO CASE
  3534.           CASE nMess = KB_TAB
  3535.             DO GetNext WITH .T.
  3536.           CASE nMess = KB_SHIFTTAB
  3537.             DO GetNext WITH .F.
  3538.           CASE nAccel > 0
  3539.             DO GetNext WITH nAccel
  3540.         ENDCASE
  3541.       ENDIF
  3542.  
  3543.     OTHERWISE
  3544.       DO CkWaitAc
  3545.       IF nAccel > 0
  3546.         IF nAccel <> nCurrent
  3547.           DO GetNext WITH nAccel
  3548.         ENDIF
  3549.       ENDIF
  3550.  
  3551.   ENDCASE
  3552.  
  3553. RETURN
  3554. *-- EOP: DispCD
  3555.  
  3556. ENDTEXT
  3557.  
  3558. ENDIF
  3559.  
  3560. IF cl
  3561.  
  3562. TEXT
  3563.  
  3564. PROCEDURE DispCL
  3565. *----------------------------------------------------------------------------
  3566. * NAME
  3567. *   DispCL -
  3568. *
  3569. * DESCRIPTION
  3570. *
  3571. *----------------------------------------------------------------------------
  3572.   PRIVATE nPossNext, lOkSelect
  3573.  
  3574.   DO CASE
  3575.     CASE nMess = KB_TAB
  3576.       DO GetNext WITH .T.
  3577.     CASE nMess = KB_SHIFTTAB
  3578.       DO GetNext WITH .F.
  3579.     CASE nMess = KB_MOUSE
  3580.       nPossNext = GetMsTo()
  3581.       IF nPossNext > 0
  3582.         IF nPossNext = nCurrent
  3583.           nMess = KB_MOUSE
  3584.         ELSE
  3585.           DO GetNext WITH nPossNext, .F.
  3586.         ENDIF
  3587.       ELSE
  3588.         IF nMess <> DLN_CANCEL
  3589.           nMess = 0
  3590.         ENDIF
  3591.       ENDIF
  3592.     CASE nMess = KB_CTRLW .AND. nAccel > 0
  3593.       DO GetNext WITH nAccel, .F.
  3594.     CASE nMess = KB_ENTER
  3595.       IF nDlgDef > 0
  3596.         DO TButton WITH BN_CLICKED, .F., nDlgDef
  3597.       ENDIF
  3598.     CASE nMess = KB_DOWNARROW .OR. ;
  3599.          nMess = KB_SPACE .OR. ;
  3600.          nMess = KB_UPARROW
  3601.  
  3602.       DO TCombo WITH CBN_DROPDOW, .F., nCurrent
  3603.  
  3604. ENDTEXT
  3605.   SET FILTER TO currentid > 1       .AND. ;
  3606.       LEFT( fieldname, 3 ) = "CL_"  .AND. ;
  3607.       .NOT. ISBLANK( ok_cond )
  3608.   GO TOP
  3609.   IF .NOT. EOF()
  3610. TEXT
  3611.       *-------------------------------
  3612.       *-- GENCODE - Do VALID code here
  3613.       *-------------------------------
  3614.       lOkSelect = .T.
  3615.       DO CASE
  3616. ENDTEXT
  3617.     SCAN
  3618.       cClass = LEFT( fieldname, 3 )
  3619.       cField = TRIM( fieldname )
  3620.  
  3621. ? '        CASE nCurrent =', TSTR( RECNO() )
  3622. ?? "&"+"&" AT 41, cField
  3623.       cOkCond = ok_cond
  3624.       IF UPPER( LEFT( cOkCond, 3 ) ) = "DO("
  3625.         *-- cDoExpr = '("TVDIAL")'
  3626.         cDoExpr = SUBSTR( cOkCond, 3 )
  3627. ? '            DO', &cDoExpr
  3628.       ELSE
  3629. ? '            lOkSelect =', ok_cond
  3630.       ENDIF
  3631.     ENDSCAN
  3632.  
  3633. ? '      ENDCASE'
  3634. ? '      IF .NOT. lOkSelect'
  3635. ? '        STORE 0 TO nMess, nMsEvent'
  3636. ? '      ENDIF'
  3637.   ENDIF
  3638.   SET FILTER TO
  3639.  
  3640. TEXT
  3641.  
  3642.       IF nMsEvent = KB_MOUSE
  3643.         nPossNext = GetMsTo()
  3644.         IF nPossNext > 0
  3645.           IF nPossNext <> nCurrent
  3646.             *-- User clicked to another field
  3647.             DO GetNext WITH nPossNext, .F.
  3648.           ENDIF
  3649.         ENDIF
  3650.       ELSE
  3651.         DO CASE
  3652.           CASE nMess = KB_TAB
  3653.             DO GetNext WITH .T.
  3654.           CASE nMess = KB_SHIFTTAB
  3655.             DO GetNext WITH .F.
  3656.           CASE nAccel > 0
  3657.             DO GetNext WITH nAccel, .F.
  3658.         ENDCASE
  3659.       ENDIF
  3660.  
  3661.     OTHERWISE
  3662.       DO CkWaitAc
  3663.       IF nAccel > 0
  3664.         IF nAccel <> nCurrent
  3665.           DO GetNext WITH nAccel, .F.
  3666.         ENDIF
  3667.       ENDIF
  3668.  
  3669.   ENDCASE
  3670.  
  3671. RETURN
  3672. *-- EOP: DispCl
  3673.  
  3674. ENDTEXT
  3675.  
  3676. ENDIF && cl
  3677.  
  3678. RETURN
  3679. *-- EOP: GDisp
  3680.  
  3681.  
  3682. PROCEDURE GGetNext
  3683. *----------------------------------------------------------------------------
  3684. * NAME
  3685. *   GGetNext -
  3686. *
  3687. * DESCRIPTION
  3688. *
  3689. *----------------------------------------------------------------------------
  3690. TEXT
  3691.  
  3692. PROCEDURE GetNext
  3693. PARAMETERS p__dir, pl_SameGrp
  3694. *----------------------------------------------------------------------------
  3695. * NAME
  3696. *   GetNext -
  3697. *
  3698. * DESCRIPTION
  3699. *
  3700. * PARAMETERS
  3701. *   p__dir     = .T. to go forward, .F. to go back, number to go to
  3702. *                record number.
  3703. *   pl_SameGrp = .F. to go to first item in next/prev group, .T. will
  3704. *                go to the next/prev item within the same group.  Only
  3705. *                applies to p__dir being next/previous.
  3706. *
  3707. *----------------------------------------------------------------------------
  3708.   PRIVATE cPrevClass, nWay, npCurrent, nPointer, nNextObj, nNextPtr
  3709.   PRIVATE nRecNo, npRecNo, lExit, cField, cVar, cCurrClass
  3710. ENDTEXT
  3711.  
  3712.   SET FILTER TO .NOT. ( LEFT( fieldname, 3 ) $ "BT_,CK_,RB_" ) .AND. ;
  3713.                 .NOT. ISBLANK( ok_cond )
  3714.   GO TOP
  3715.   IF .NOT. EOF()
  3716.  
  3717. TEXT
  3718.   *--------------------------------------------------------------
  3719.   *-- Check for OK conditions, unless its a direct move to cancel
  3720.   *--------------------------------------------------------------
  3721.   IF ( TYPE( 'p__dir' ) = "N" .AND. p__dir <> nCancelBt ) .OR. ;
  3722.      TYPE( 'p__dir' ) = "L"
  3723. ENDTEXT
  3724. ? '    DO CASE'
  3725.     SCAN
  3726.       cClass = LEFT( fieldname, 3 )
  3727.       cField = TRIM( fieldname )
  3728. ? '      CASE nCurrent =', TSTR( RECNO() )
  3729. ?? "&"+"&" AT 41, cField
  3730.       cOkCond = ok_cond
  3731. ? '        IF .NOT.', cOkCond
  3732. ? '           RETURN'
  3733. ? '        ENDIF'
  3734.     ENDSCAN
  3735.  
  3736. ? '    ENDCASE'
  3737. ? '  ENDIF'
  3738. ?
  3739.   ENDIF
  3740.  
  3741.   SET FILTER TO
  3742.  
  3743. TEXT
  3744.  
  3745.   *------------------------------------------
  3746.   *-- Check for move out of the current group
  3747.   *------------------------------------------
  3748.   IF .NOT. pl_SameGrp
  3749.     IF TYPE( "p__dir" ) = "L"
  3750.       DO HasTitle WITH nCurrent, BN_UNHILITE
  3751.     ENDIF
  3752.   ENDIF
  3753.  
  3754. ENDTEXT
  3755.  
  3756.   IF nDlgDef > 0
  3757. ? '  cPrevClass = LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 )'
  3758. ?
  3759.   ENDIF
  3760.  
  3761.   IF rb .OR. ck
  3762. TEXT
  3763.  
  3764.   *--------------------------------------------------
  3765.   *-- Set the current CK or RB pointer before leaving
  3766.   *--------------------------------------------------
  3767. ENDTEXT
  3768. ? '  DO CASE'
  3769.     SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "RB_,CK_"
  3770.       cClass = LEFT( fieldname, 3 )
  3771.       cField = TRIM( fieldname )
  3772. ? '    CASE nCurrent =', TSTR( RECNO() )
  3773. ??    "&"+"&" AT 41, cField
  3774.       cVar = "n" + LEFT( fieldname, RAT( "_", fieldname ) - 1 )
  3775. ? '      STORE nCurrent TO', cVar
  3776.     ENDSCAN
  3777.  
  3778. ? '  ENDCASE'
  3779.   ENDIF
  3780.  
  3781. TEXT
  3782.  
  3783.   *----------------------------------------
  3784.   *-- Handle the forward and backward moves
  3785.   *----------------------------------------
  3786.   IF TYPE( "p__dir" ) = "L"
  3787.     DO CASE
  3788. ENDTEXT
  3789.  
  3790.   IF rb .OR. ck .OR. ef
  3791. TEXT
  3792.       *-------------------------------------------
  3793.       *-- Go forward or backward in the same group
  3794.       *-------------------------------------------
  3795.       CASE  pl_SameGrp
  3796.         nWay = IIF( p__dir, 10, 9 )  && 10 Forward, 9 Back
  3797.         npCurrent = aObjPoint[ nCurrent ]
  3798.         nPointer = npCurrent
  3799.         *-----------------------------------------------
  3800.         *-- Is this a one item radio button or check box
  3801.         *-----------------------------------------------
  3802.         IF aClkObj[ npCurrent, 4 ] <> aClkObj[ npCurrent, nWay ]
  3803.           DO WHILE .T.
  3804.             *------------------------------------------------------
  3805.             *-- Check to see if the next object's WHEN clause is Ok
  3806.             *------------------------------------------------------
  3807.             nNextObj = aClkObj[ nPointer, nWay ]
  3808.             IF WhenOk( nNextObj )
  3809.               nPointer = aObjPoint[ nNextObj ]
  3810.               EXIT
  3811.             ELSE
  3812.               *-----------------------------------------------
  3813.               *-- See if we looped back to the item we were on
  3814.               *-----------------------------------------------
  3815.               nNextPtr  = aObjPoint[ nNextObj ]
  3816.               IF nNextPtr = npCurrent
  3817.                 EXIT
  3818.               ELSE
  3819.                 nPointer = nNextPtr
  3820.               ENDIF
  3821.             ENDIF
  3822.           ENDDO
  3823.         ENDIF
  3824.         IF nPointer <> npCurrent
  3825.           nCurrent = aClkObj[ nPointer, 4 ]
  3826.           nCurrGrp = aClkObj[ nPointer, 5 ]
  3827.         ENDIF
  3828. ENDTEXT
  3829.   ENDIF
  3830.  
  3831. TEXT
  3832.       OTHERWISE
  3833.         nWay = IIF( p__dir, 6, 7 )  && 6 Forward, 7 Back
  3834.         nRecNo = nCurrent
  3835.         npRecNo = aObjPoint[ nRecNo ]
  3836.         lExit = .F.
  3837.         DO WHILE aClkObj[ npRecNo, 5 ] = nCurrGrp
  3838.           nRecNo = aClkObj[ npRecNo, nWay ]
  3839.           npRecNo = aObjPoint[ nRecNo ]
  3840.           IF aClkObj[ npRecNo, 5 ] = nCurrGrp
  3841.             LOOP
  3842.           ELSE
  3843.             *--------------------------------------------------
  3844.             *-- Finally, we have moved out of the current group
  3845.             *--------------------------------------------------
  3846.             nCurrGrp = aClkObj[ npRecNo, 5 ]
  3847.             IF .NOT. WhenOk( nRecNo )
  3848.               LOOP
  3849.             ELSE
  3850.               nCurrent = nRecNo
  3851.               lExit = .T.
  3852.             ENDIF
  3853.           ENDIF
  3854. ENDTEXT
  3855.   IF ck .OR. rb
  3856. TEXT
  3857.  
  3858.           *---------------------------------------------------------
  3859.           *-- Was this a move into a radio button or check box group
  3860.           *---------------------------------------------------------
  3861.           cField = aClkObj[ npRecNo, 11 ]
  3862.           cVar   = "N" + LEFT( cField, RAT( "_", cField ) - 1 )
  3863.           DO CASE
  3864. ENDTEXT
  3865.     SET FILTER TO
  3866.     SCAN FOR currentid > 0 .AND. ;
  3867.              LEFT( fieldname, 3 ) $ "RB_,CK_" .AND. ;
  3868.              RIGHT( TRIM( fieldname ), 2 ) = "_1"
  3869.       cField = TRIM( fieldname )
  3870.       cVar   = "N" + LEFT( cField, RAT( "_", cField ) - 1 )
  3871. ? '            CASE cVar = "' + cVar + '"'
  3872. ? '              nRecNo =', cVar
  3873. ? '              npRecNo = aObjPoint[ nRecNo ]'
  3874. ? '              nCurrent = nRecNo'
  3875. ? '              nCurrGrp = aClkObj[ npRecNo, 5 ]'
  3876.     ENDSCAN
  3877.  
  3878. ? '          ENDCASE'
  3879.   ENDIF
  3880.  
  3881. TEXT
  3882.           IF lExit
  3883.             EXIT
  3884.           ENDIF
  3885.         ENDDO
  3886.  
  3887.         DO HasTitle WITH nCurrent, BN_HILITE
  3888.  
  3889.     ENDCASE
  3890.  
  3891.   ELSE
  3892.  
  3893.     *-------------------------------------------------------
  3894.     *-- Handle direct moves to objects via Alt key and Mouse
  3895.     *-------------------------------------------------------
  3896.     IF .NOT. WhenOk( p__dir )
  3897.       nMess = 0
  3898.       RETURN
  3899.     ENDIF
  3900.  
  3901. ENDTEXT
  3902.  
  3903.   IF rb
  3904.  
  3905. TEXT
  3906.     *--------------------------------------------------------------
  3907.     *-- Check to see if we are leaving or going into a radio button
  3908.     *-- group.  If so, we may have to toggle off the current dot.
  3909.     *--------------------------------------------------------------
  3910.     DO CASE
  3911.       *-----------------------------------------------------------
  3912.       *-- If the current object is a radio button and the group to
  3913.       *-- move into is the same, then...
  3914.       *-----------------------------------------------------------
  3915.       CASE LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 ) = "RB_" .AND. ;
  3916.            aClkObj[ aObjPoint[ p__dir ], 5 ] = nCurrGrp
  3917.  
  3918.         DO CASE
  3919. ENDTEXT
  3920.     SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) = "RB_"
  3921.  
  3922. ? '          CASE nCurrent =', TSTR( RECNO() )
  3923. ? '            STORE .F. TO', TRIM( fieldname )
  3924. ? '            DO TButton WITH WM_PAINT, BN_UNHILITE, nCurrent'
  3925.     ENDSCAN
  3926.  
  3927. TEXT
  3928.         ENDCASE
  3929.  
  3930.       *---------------------------------------------
  3931.       *-- If we are moving into a radio button group
  3932.       *---------------------------------------------
  3933.       CASE LEFT( aClkObj[ aObjPoint[ p__dir ], 11 ], 3 ) = "RB_"
  3934.         DO CASE
  3935. ENDTEXT
  3936.  
  3937.     SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) = "RB_"
  3938.  
  3939. ? '          CASE p__dir =', TSTR( RECNO() )
  3940.       cVar = "n" + LEFT( fieldname, RAT( "_", fieldname ) - 1 )
  3941. ? '            IF p__dir <>', cvar
  3942. ? '              cField = aClkObj[ aObjPoint[', cVar, '], 11 ]'
  3943. ? '              STORE .F. TO &' + 'cField'
  3944. ? '              DO TButton WITH WM_PAINT, BN_UNHILITE,', cVar
  3945. ? '            ENDIF'
  3946.     ENDSCAN
  3947. ? '        ENDCASE'
  3948. ?
  3949. ? '    ENDCASE'
  3950. ?
  3951.  
  3952.   ENDIF && Rb
  3953.  
  3954. TEXT
  3955.  
  3956.     IF nCurrGrp <> aClkObj[ aObjPoint[ p__dir ], 5 ]
  3957.       DO HasTitle WITH nCurrent, BN_UNHILITE
  3958.       DO HasTitle WITH p__dir, BN_HILITE
  3959.       nCurrent = p__dir
  3960.       nCurrGrp = aClkObj[ aObjPoint[ nCurrent ], 5 ]
  3961. ENDTEXT
  3962.  
  3963.   SET FILTER TO currentid > 0 .AND. LEFT( fieldname, 3 ) = "BT_"
  3964.   GO TOP
  3965.   IF .NOT. EOF()
  3966. ? '      DO CASE'
  3967.     SCAN
  3968. ? '        CASE nCurrent =', TSTR( RECNO() )
  3969. ? '          DO TButton WITH BN_CLICKED, .F., nCurrent'
  3970.     ENDSCAN
  3971. ? '      ENDCASE'
  3972.   ENDIF
  3973.   SET FILTER TO
  3974.  
  3975. TEXT
  3976.     ELSE
  3977.       DO HasTitle WITH p__dir, BN_HILITE
  3978.     ENDIF
  3979.     nCurrent = p__dir
  3980.     nCurrGrp = aClkObj[ aObjPoint[ nCurrent ], 5 ]
  3981.  
  3982.   ENDIF
  3983.  
  3984. ENDTEXT
  3985.  
  3986.   IF nDlgDef > 0
  3987.  
  3988. TEXT
  3989.   *---------------------------------------------------------------
  3990.   *-- Repaint the Default button if we were on a button before and
  3991.   *-- the target is not a button.
  3992.   *---------------------------------------------------------------
  3993. ENDTEXT
  3994.     GOTO nDlgDef
  3995. ? '  cCurrClass = LEFT( aClkObj[ aObjPoint[ nCurrent ], 11 ], 3 )'
  3996. ? '  IF cPrevClass = "BT_" .AND. cCurrClass <> "BT_"'
  3997. ? '    DO TButton WITH WM_PAINT, BN_DEFAULT, nDlgDef'
  3998. ? '    STORE .T. TO', TRIM( fieldname )
  3999. ? '  ENDIF'
  4000.  
  4001.   ENDIF
  4002.  
  4003.   IF rb .OR. ck
  4004. TEXT
  4005.  
  4006.   *---------------------------------------------------------
  4007.   *-- Save the current CK or RB pointer for the target group
  4008.   *---------------------------------------------------------
  4009. ENDTEXT
  4010. ? '  DO CASE'
  4011.     SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "RB_,CK_,BT_"
  4012.       cClass = LEFT( fieldname, 3 )
  4013.       cField = TRIM( fieldname )
  4014. ? '    CASE nCurrent =', TSTR( RECNO() )
  4015. ??    "&"+"&" AT 41, cField
  4016.       cVar = "n" + LEFT( fieldname, RAT( "_", fieldname ) - 1 )
  4017. ? '      STORE nCurrent TO', cVar
  4018. ? '      IF TYPE( "p__dir" ) = "N"'
  4019.       DO CASE
  4020.         CASE cClass = "BT_"
  4021. ? '        STORE .T. TO', cField
  4022.         CASE cClass = "RB_"
  4023. ? '        STORE .F. TO', cField
  4024. ? '        DO TButton WITH BN_CLICKED, .F., nCurrent'
  4025.         CASE cClass = "CK_"
  4026. ? '        DO TButton WITH BN_CLICKED, .F., nCurrent'
  4027.       ENDCASE
  4028. ? '      ENDIF'
  4029.  
  4030.     ENDSCAN
  4031.  
  4032. ? '  ENDCASE'
  4033.   ENDIF
  4034.  
  4035. TEXT
  4036.  
  4037. RETURN
  4038. *-- EOP: GetNext WITH p__dir, pl_SameGrp
  4039.  
  4040. ENDTEXT
  4041.  
  4042.  
  4043. RETURN
  4044. *-- EOP: GGetNext
  4045.  
  4046. PROCEDURE GWhenOk
  4047. *----------------------------------------------------------------------------
  4048. * NAME
  4049. *   GWhenOk -
  4050. *
  4051. * DESCRIPTION
  4052. *
  4053. *----------------------------------------------------------------------------
  4054. TEXT
  4055.  
  4056. FUNCTION WhenOk
  4057. PARAMETERS pnTarget
  4058. *----------------------------------------------------------------------------
  4059. * NAME
  4060. *   WhenOk - Validate the WHEN condition for a target object
  4061. *
  4062. * DESCRIPTION
  4063. *
  4064. * PARAMETERS
  4065. *   pnTarget   = Object ID to verify against
  4066. *
  4067. *----------------------------------------------------------------------------
  4068.   PRIVATE lWhenOk
  4069.   lWhenOk = .T.
  4070.  
  4071. ENDTEXT
  4072.  
  4073.   SET FILTER TO currentid > 0 .AND. .NOT. ISBLANK( ed_cond )
  4074.   GO TOP
  4075.   IF .NOT. EOF()
  4076. ? '  DO CASE'
  4077.  
  4078.     SCAN
  4079. ? '    CASE pnTarget =', TSTR( RECNO() )
  4080. ?? "&"+"&" AT 41, TRIM( fieldname )
  4081.       cWhen = ed_cond
  4082.       cWhen = TRIM( cWhen )
  4083. ? '      IF .NOT. (', cWhen, ')'
  4084. ? '        lWhenOk = .F.'
  4085. ? '      ENDIF'
  4086.     ENDSCAN
  4087.  
  4088.     SET FILTER TO
  4089. ? '  ENDCASE'
  4090.  
  4091.   ENDIF
  4092.  
  4093. TEXT
  4094.  
  4095. RETURN lWhenOk
  4096. *-- EOF: WhenOk( pnTarget )
  4097.  
  4098. ENDTEXT
  4099.  
  4100. RETURN
  4101. *-- EOP: GWhenOk
  4102.  
  4103. PROCEDURE GCkWaitAc
  4104. *----------------------------------------------------------------------------
  4105. * NAME
  4106. *   GCkWaitAc -
  4107. *
  4108. * DESCRIPTION
  4109. *
  4110. *----------------------------------------------------------------------------
  4111. TEXT
  4112.  
  4113. PROCEDURE CkWaitAc
  4114. *----------------------------------------------------------------------------
  4115. * NAME
  4116. *   CkWaitAc - Look for Accel key from Wait command
  4117. *
  4118. * DESCRIPTION
  4119. *   This routine has high International risk for translations.
  4120. *----------------------------------------------------------------------------
  4121.  
  4122.   IF nMess < 0
  4123.     nAccPress = nMess + 500
  4124.   ELSE
  4125.     IF nMess >= 97 .AND. nMess <= 122
  4126.       nMess = nMess - 32
  4127.     ENDIF
  4128.     nAccPress = nMess
  4129.   ENDIF
  4130.  
  4131.   DO CASE
  4132. ENDTEXT
  4133.  
  4134.   SCAN FOR .NOT. ISBLANK( pickkey )
  4135.  
  4136. ? '    CASE nAccPress =', TSTR( ASC( UPPER( pickkey ) ) )
  4137. ?? '&'+'&' AT 41, pickkey, '-', TRIM( fieldname )
  4138.  
  4139.     IF RIGHT( TRIM( fieldname ), 2 ) = "_0"
  4140. ? '      nAccel =', TSTR( previd )
  4141.     ELSE
  4142. ? '      nAccel =', TSTR( currentid )
  4143.     ENDIF
  4144.  
  4145.   ENDSCAN
  4146.  
  4147. TEXT
  4148.     OTHERWISE
  4149.       nAccel = 0
  4150.   ENDCASE
  4151.  
  4152. RETURN
  4153. *-- EOP: CkWaitAc
  4154.  
  4155. ENDTEXT
  4156.  
  4157. RETURN
  4158. *-- EOP: GCkWaitAc
  4159.  
  4160.  
  4161. FUNCTION TSTR
  4162. PARAMETERS pnString
  4163. *----------------------------------------------------------------------------
  4164. * NAME
  4165. *   TSTR() - LTrim a number converted to a string.
  4166. *
  4167. * DESCRIPTION
  4168. *   Convert to #define later on
  4169. *
  4170. * PARAMETERS
  4171. *   pnString   = Number to convert to a string
  4172. *
  4173. *----------------------------------------------------------------------------
  4174. RETURN LTRIM( STR( pnString )  )
  4175. *-- EOF: TSTR( pcString )
  4176.  
  4177.  
  4178. FUNCTION STR2QT
  4179. PARAMETERS pcStr
  4180. *----------------------------------------------------------------------------
  4181. * NAME
  4182. *   STR2Qt() - Convert string value to a quoted output string
  4183. *
  4184. * DESCRIPTION
  4185. *   Convert to #define later on
  4186. *
  4187. * PARAMETERS
  4188. *   pcStr      = String to check
  4189. *
  4190. *----------------------------------------------------------------------------
  4191. RETURN( '"' + pcStr + '"' )
  4192. *-- EOF: STR2Qt( pcStr )
  4193.  
  4194.  
  4195. PROCEDURE GGetMsTo
  4196. *----------------------------------------------------------------------------
  4197. * NAME
  4198. *   GGetMsTo -
  4199. *
  4200. * DESCRIPTION
  4201. *
  4202. *----------------------------------------------------------------------------
  4203. TEXT
  4204.  
  4205. FUNCTION GetMsTo
  4206. PARAMETER plChkOnly
  4207. *----------------------------------------------------------------------------
  4208. * NAME
  4209. *   GetMsTo() -
  4210. *
  4211. * DESCRIPTION
  4212. *
  4213. *----------------------------------------------------------------------------
  4214.  
  4215.   *-- Check for a click on the close button
  4216.   IF nMRow = nRowCls .AND. nMCol >= nLColCls .AND. nMCol <= nRColCls
  4217.     nMess = DLN_CANCEL
  4218.     nRtn = 0
  4219.   ELSE
  4220.     IF nMRow = nRowCls .AND. nMCol >= nCol .AND. nMCol <= nRWinCol
  4221.       *---------------------------------------------------------
  4222.       *-- All this to remove the shadow before moving the window
  4223.       *---------------------------------------------------------
  4224. ENDTEXT
  4225. ? '      SAVE WINDOW', pcDbfDial, 'TO _' + pcDbfDial
  4226. ? '      RELEASE WINDOW', pcDbfDial
  4227. ? '      RESTORE SCREEN FROM', pcDbfDial
  4228. ? '      RESTORE WINDOW', pcDbfDial, 'FROM _' + pcDbfDial
  4229. ? '      ERASE _' + pcDbfDial + '.win'
  4230. ? '      ACTIVATE WINDOW', pcDbfDial
  4231. ?
  4232. ? '      @ 0, 0 TO nHigh - 1, nWidth - 1 COLOR', cClrWBt
  4233. ? '      @ 0, 2 SAY "[ ]" COLOR', cClrWBt
  4234. ? '      @ 0, 3 SAY CHR( 254 ) COLOR', cClrWBt
  4235.   GO TOP
  4236.   nOrigRow = row
  4237.   SCAN FOR (value_type = "T" .AND. row = nOrigRow)
  4238. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length ) + ' SAY '
  4239. ??  '"' + TRIM( template ) + '" COLOR', cClrWBt
  4240.   ENDSCAN
  4241.  
  4242. TEXT
  4243.  
  4244.       *-------------------------------
  4245.       *-- Start the move window action
  4246.       *-------------------------------
  4247.       nDelX = nMRow
  4248.       nDelY = nMCol
  4249.  
  4250.       SET CONSOLE OFF
  4251.       WAIT
  4252.       SET CONSOLE ON
  4253.  
  4254.       nMRow = MROW()
  4255.       nMCol = MCOL()
  4256.       nDelX = nMRow - nDelX
  4257.       nDelY = nMCol - nDelY
  4258.       lMoveOk = .T.
  4259.       ON ERROR lMoveOk = .F.
  4260. ENDTEXT
  4261.  
  4262. ? '      MOVE WINDOW',  pcDbfDial, 'BY nDelX, nDelY'
  4263.  
  4264. TEXT
  4265.       ON ERROR
  4266.       IF lMoveOk
  4267.         nRowCls   = nRowCls + nDelX
  4268.         nCol      = nCol + nDelY
  4269.         nLColCls  = ncol + 2            && Left column for close button
  4270.         nRColCls  = ncol + 4            && End column for close button
  4271.         nRWinCol  = ncol + nWidth - 1   && Rigth column for window
  4272.         nXOffset  = nRowCls - nOrigRow
  4273.         nYOffset  = nCol    - nOrigCol
  4274.       ENDIF
  4275.  
  4276.       *---------------------------------------------------------
  4277.       *-- Display the new shadow for after moving the dialog box
  4278.       *---------------------------------------------------------
  4279. ENDTEXT
  4280.  
  4281.   GO TOP
  4282. ? '      SAVE WINDOW', pcDbfDial, 'TO _' + pcDbfDial
  4283. ? '      RELEASE WINDOW', pcDbfDial
  4284. ? '      RESTORE SCREEN FROM', pcDbfDial
  4285. ? '      ACTIVATE SCREEN'
  4286. ? '      IF nCol +', TSTR( length ), '< 80 .AND. nRowCls + '
  4287. ??         TSTR( decimals ), '<= nScreen'
  4288. ? '        @ nRowCls + 1, nCol + 1 FILL TO nRowCls + '
  4289. ??           TSTR( decimals ) + ', nCol +', TSTR( length )
  4290. ??           ' COLOR n+/n'
  4291. ? '      ENDIF'
  4292. ? '      RESTORE WINDOW', pcDbfDial, 'FROM _' + pcDbfDial
  4293. ? '      ERASE _' + pcDbfDial + '.win'
  4294. ? '      ACTIVATE WINDOW', pcDbfDial
  4295. ?
  4296.  
  4297. ? '      @ 0, 0 TO nHigh - 1, nWidth - 1 DOUBLE COLOR', cClrTit
  4298. ? '      @ 0, 2 SAY "[ ]" COLOR', cClrTit
  4299. ? '      @ 0, 3 SAY CHR( 254 ) COLOR', cClrWBt
  4300.   nOrigRow = row
  4301.   SCAN FOR ( value_type = "T" .AND. row = nOrigRow ) .OR. fieldname = "TI_TEXT"
  4302.     IF fieldname = "TI_TEXT"
  4303.       cMemvar = pic_choice
  4304.       cMemcar = TRIM( cMemvar )
  4305.       cMemvar = SUBSTR( cMemvar, 2, LEN( cMemvar ) - 2 )
  4306. ? '      IF TYPE( "' + cMemvar + '" ) = "C"'
  4307. ? "        @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  4308.            "SAY HelpCTit(",cMemvar+",",TSTR(LEN(TRIM(template)))+", .T. )", ;
  4309.            "COLOR", cClrTit
  4310. ? '      ELSE'
  4311. ? "        @", TSTR( sys_flen ) + ", " + TSTR( length ), ;
  4312.              'SAY REPL( "*",', TSTR( LEN( TRIM( template ) ) ),;
  4313.              ') COLOR', cClrTit
  4314. ? '      ENDIF'
  4315.     ELSE
  4316. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length ) + ' SAY '
  4317. ??  '"' + TRIM( template ) + '" COLOR', cClrTit
  4318.     ENDIF
  4319.   ENDSCAN
  4320.  
  4321. TEXT
  4322.  
  4323.       nRtn = -1
  4324.     ELSE
  4325.       *-----------------------------------
  4326.       *-- Check for click on a live object
  4327.       *-----------------------------------
  4328.       nRtn = 0
  4329.       i = 1
  4330.       DO WHILE i <= nClkObj
  4331.         IF nMRow =  aClkObj[ i, 1 ] + nXOffSet .AND. ;
  4332.            nMCol >= aClkObj[ i, 2 ] + nYOffset .AND. ;
  4333.            nMCol <= aClkObj[ i, 3 ] + nYOffset
  4334.           nRtn = aClkObj[ i, 4 ]
  4335.           EXIT
  4336.         ENDIF
  4337.         i = i + 1
  4338.       ENDDO
  4339.  
  4340.       IF nRtn = 0
  4341.         *----------------------------------------------------------
  4342.         *-- Not found, check for a click in a Combo box or list box
  4343.         *----------------------------------------------------------
  4344.         IF nClkBox > 0
  4345.           i = 1
  4346.           DO WHILE i <= nClkBox
  4347.             IF nMRow >= aClkBox[ i, 1 ] + nXOffset .AND. ;
  4348.                nMRow <= aClkBox[ i, 1 ] + nXOffset + aClkBox[ i, 2 ] .AND. ;
  4349.                nMCol >= aClkBox[ i, 3 ] + nYOffset .AND. ;
  4350.                nMCol <= aClkBox[ i, 3 ] + nYOffset + aClkBox[ i, 4 ]
  4351.               nRtn = aClkBox[ i, 5 ] - 1
  4352.               aClkBox[ i, 6 ] = .T.
  4353.               EXIT
  4354.             ENDIF
  4355.             i = i + 1
  4356.           ENDDO
  4357.         ENDIF
  4358.       ENDIF
  4359.  
  4360.     ENDIF
  4361.   ENDIF
  4362.  
  4363. RETURN( nRtn )
  4364. *-- EOF: GetMsTo(  )
  4365.  
  4366. ENDTEXT
  4367.  
  4368. RETURN
  4369. *-- EOP: GGetMsTo
  4370.  
  4371.  
  4372. PROCEDURE GMsHand
  4373. *----------------------------------------------------------------------------
  4374. * NAME
  4375. *   GMsHand -
  4376. *
  4377. * DESCRIPTION
  4378. *
  4379. *----------------------------------------------------------------------------
  4380. TEXT
  4381.  
  4382. PROCEDURE MsHand
  4383. PARAMETERS pnMRow, pnMCol, pl_IsPop
  4384. *----------------------------------------------------------------------------
  4385. * NAME
  4386. *   MsHand -
  4387. *
  4388. * DESCRIPTION
  4389. *
  4390. * PARAMETERS
  4391. *   pnMRow     =
  4392. *   pnMCol     =
  4393. *   pl_IsPop   =
  4394. *
  4395. *----------------------------------------------------------------------------
  4396.   nMRow = pnMRow
  4397.   nMCol = pnMCol
  4398.   nMsEvent = KB_MOUSE
  4399.  
  4400. ENDTEXT
  4401.  
  4402.   IF cd .OR. cs .OR. cl .OR. lb .OR. ud
  4403. ? '  IF pl_IsPop'
  4404. ? '    DO CASE'
  4405.     SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "CD_,CS_,CL_,LB_,UD_"
  4406.       cField = TRIM( fieldname )
  4407.       cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  4408. ? '      CASE nCurrent =', TSTR( RECNO() )
  4409.       IF LEFT( fieldname, 3 ) <> "UD_"
  4410. ? '        STORE BAR() TO', cVar
  4411. ? '        SAVE SCREEN TO', cField
  4412. ? '        KEYBOARD "{LeftArrow}"'
  4413.       ELSE
  4414.         cOkCond = ok_cond
  4415.         cOkCond = TRIM( cOkCond )
  4416.         IF .NOT. ISBLANK( cOkCond )
  4417. ? '        IF', cOkCond
  4418. ? '        ENDIF'
  4419.         ENDIF
  4420.       ENDIF
  4421.     ENDSCAN
  4422. ? '    ENDCASE'
  4423. ? '  ELSE'
  4424. ? '    KEYBOARD "{Ctrl-W}"'
  4425. ? '  ENDIF'
  4426.  
  4427.   ELSE
  4428.  
  4429. TEXT
  4430.   KEYBOARD "{Ctrl-W}"
  4431. ENDTEXT
  4432.  
  4433.   ENDIF
  4434.  
  4435. TEXT
  4436.  
  4437. RETURN
  4438. *-- EOP: MsHand WITH pnMRow, pnMCol, pl_IsPop
  4439.  
  4440. ENDTEXT
  4441.  
  4442. RETURN
  4443. *-- EOP: GMsHand
  4444.  
  4445.  
  4446. PROCEDURE GPostVals
  4447. *----------------------------------------------------------------------------
  4448. * NAME
  4449. *   GPostVals -
  4450. *
  4451. * DESCRIPTION
  4452. *
  4453. *----------------------------------------------------------------------------
  4454.  
  4455. TEXT
  4456.  
  4457. PROCEDURE PostVals
  4458. *----------------------------------------------------------------------------
  4459. * NAME
  4460. *   PostVals -
  4461. *
  4462. * DESCRIPTION
  4463. *
  4464. *----------------------------------------------------------------------------
  4465.  
  4466. ENDTEXT
  4467.  
  4468. ? '  IF TYPE( "' + pcDbfDial + '[1]" ) <> "U"'
  4469. ?
  4470.  
  4471.   n = 1
  4472.   SET FILTER TO
  4473.   SET ORDER TO ObjOrder
  4474.   SCAN FOR currentid > 0
  4475.     cField = TRIM( fieldname )
  4476.     cClass = LEFT( cField, 3 )
  4477. ? '   ', pcDbfDial + '[', TSTR(n), '] =', cField
  4478.     IF cClass = "LB_"
  4479.       cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  4480. ? '    IF', cVar, '> 0'
  4481. ? '     ', pcDbfDial + '[', TSTR(n), '] = '
  4482. ??      'BARPROMPT(', cVar + ', "' + cField + '")'
  4483. ? '    ENDIF'
  4484.     ENDIF
  4485.     n = n + 1
  4486.   ENDSCAN
  4487.  
  4488. TEXT
  4489.  
  4490.   ENDIF
  4491.  
  4492. RETURN
  4493. *-- EOP: PostVals
  4494.  
  4495. ENDTEXT
  4496.  
  4497.  
  4498. RETURN
  4499. *-- EOP: GPostVals
  4500.  
  4501.  
  4502. PROCEDURE GTUser
  4503. *----------------------------------------------------------------------------
  4504. * NAME
  4505. *   GTUser -
  4506. *
  4507. * DESCRIPTION
  4508. *
  4509. *----------------------------------------------------------------------------
  4510.  
  4511. TEXT
  4512.  
  4513. PROCEDURE TUser
  4514. PARAMETERS pn_msg, p__data, pnObject
  4515. *----------------------------------------------------------------------------
  4516. * NAME
  4517. *   TUser -
  4518. *
  4519. * DESCRIPTION
  4520. *
  4521. * PARAMETERS
  4522. *   pn_msg     =
  4523. *   p__data    =
  4524. *   pnObject   =
  4525. *
  4526. *----------------------------------------------------------------------------
  4527.  
  4528.   DO CASE
  4529.  
  4530. ENDTEXT
  4531.  
  4532.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "UD_"
  4533.     cField = TRIM( fieldname )
  4534.     cClass = LEFT( fieldname, 3 )
  4535.     cPopChoice = pic_choice
  4536.     cPopType = LEFT( UPPER( cPopChoice ), 4 )
  4537.     cEdCond = ed_cond
  4538.     cEdCond = TRIM( cEdCond )
  4539.     cOkCond = ok_cond
  4540.     cOkCond = TRIM( cOkCond )
  4541.     cDefine = descript
  4542.     cDefine = TRIM( cDefine )
  4543.  
  4544. ? '    CASE pnObject =', TSTR( RECNO() )
  4545. ? '      DO CASE'
  4546. ? '        CASE pn_msg = WM_PAINT'
  4547. ? '          DO CASE'
  4548. ? '            CASE p__data = LBN_KILLFO'
  4549. ? '              DO HasTitle WITH nCurrent, BN_UNHILITE'
  4550. ? '            CASE p__data = WM_DRAWITEM'
  4551. ? '             ', cDefine, 'NONE'
  4552. ? '              ACTIVATE WINDOW', cField
  4553.     IF .NOT. ISBLANK( cEdCond )
  4554. ? '              IF', cEdCond
  4555. ? '              ENDIF'
  4556.     ENDIF
  4557. ? '              SAVE SCREEN TO', cField
  4558. ? '              DEACTIVATE WINDOW', cField
  4559. ? '              RESTORE SCREEN FROM', cField
  4560. ? '              RELEASE SCREEN', cField
  4561. ? '              ACTIVATE WINDOW', pcDbfDial
  4562.  
  4563. ? '          ENDCASE'
  4564. ? '        CASE pn_msg = LBN_SETFOC'
  4565. ? '         ', cDefine, 'NONE'
  4566. ? '          ACTIVATE WINDOW', cField
  4567.     IF .NOT. ISBLANK( cEdCond )
  4568. ? '          IF', ed_cond
  4569. ? '          ENDIF'
  4570.     ENDIF
  4571. ? '          SAVE SCREEN TO', cField
  4572. ? '          DEACTIVATE WINDOW', cField
  4573. ? '          RESTORE SCREEN FROM', cField
  4574. ? '          RELEASE SCREEN', cField
  4575. ? '          ACTIVATE WINDOW', pcDbfDial
  4576.  
  4577. ? '        CASE pn_msg = LBN_SELCHA'
  4578. ? '          *-- ON POPUP Handler here'
  4579.       IF .NOT. ISBLANK( cOkCond )
  4580. ? '          IF', cOkCond
  4581. ? '          ENDIF'
  4582. ?
  4583.       ENDIF
  4584. ? '        CASE pn_msg = LBN_DBLCLK'
  4585. ? '      ENDCASE'
  4586.  
  4587.   ENDSCAN
  4588.  
  4589. TEXT
  4590.  
  4591.   ENDCASE
  4592.  
  4593. RETURN
  4594. *-- EOP: TUser WITH pn_msg, p__data, pnObject
  4595.  
  4596. ENDTEXT
  4597.  
  4598. RETURN
  4599. *-- EOP: GTUser
  4600.  
  4601.  
  4602.  
  4603.  
  4604. PROCEDURE GTList
  4605. *----------------------------------------------------------------------------
  4606. * NAME
  4607. *   GTList -
  4608. *
  4609. * DESCRIPTION
  4610. *
  4611. *----------------------------------------------------------------------------
  4612.  
  4613. TEXT
  4614.  
  4615. PROCEDURE TList
  4616. PARAMETERS pn_msg, p__data, pnObject
  4617. *----------------------------------------------------------------------------
  4618. * NAME
  4619. *   TList -
  4620. *
  4621. * DESCRIPTION
  4622. *
  4623. * PARAMETERS
  4624. *   pn_msg     =
  4625. *   p__data    =
  4626. *   pnObject   =
  4627. *
  4628. *----------------------------------------------------------------------------
  4629.   IF TYPE( "cPopDef" ) <> "C"
  4630.     cPopDef = ""
  4631.   ENDIF
  4632.  
  4633.   DO CASE
  4634. ENDTEXT
  4635.  
  4636.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "LB_,CS_,CD_,CL_"
  4637.     cField = TRIM( fieldname )
  4638.     cClass = LEFT( fieldname, 3 )
  4639.     cPopChoice = pic_choice
  4640.     cPopType = LEFT( UPPER( cPopChoice ), 4 )
  4641.     cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  4642.  
  4643. ? '    CASE pnObject =', TSTR( RECNO() )
  4644. ? '      DO CASE'
  4645. ? '        CASE pn_msg = WM_PAINT'
  4646. ? '          DO CASE'
  4647. ? '            CASE p__data = LBN_KILLFO'
  4648. ? '              DO HasTitle WITH nCurrent, BN_UNHILITE'
  4649. ? '            CASE p__data = WM_DRAWITEM'
  4650.  
  4651.     DO CASE
  4652.       CASE cPopType = "FILE"
  4653.  
  4654. ? '              SET COLOR OF MESS TO', cClrLbR
  4655. ? '              SET COLOR OF TITLE TO', cClrLbR
  4656.  
  4657.         nOpen = AT( "{", cPopChoice )
  4658.         IF nopen > 0
  4659.           nClose = AT( "}", cPopChoice )
  4660.           cDepVar = SUBSTR( cPopChoice, nOpen+1, nClose-nOpen-1 )
  4661.           cVarVal = cDepVar
  4662.         ELSE
  4663.           cVarVal = TRIM( cPopChoice )
  4664.           cVarVal = SUBSTR( cVarVal, AT( "LIKE", cVarVal ) + 5 )
  4665.         ENDIF
  4666.  
  4667.         cDefine = descript
  4668.         cDefine = TRIM( cDefine )
  4669.         IF nopen > 0
  4670. ? '              IF ISBLANK(', cVarVal, ')'
  4671. ? '               ', cDefine, 'PROMPT FILES LIKE *.*'
  4672. ? '              ELSE'
  4673. ? '               ', cDefine, 'PROMPT FILES LIKE &' + cVarVal
  4674. ? '              ENDIF'
  4675.         ELSE
  4676. ? '             ', cDefine, 'PROMPT FILES LIKE', cVarVal
  4677.         ENDIF
  4678. ? '              SHOW POPUP', cfield
  4679.  
  4680.       CASE cPopType = "FIEL"
  4681.       CASE cPopType = "STRU"
  4682.       CASE LEFT(cPopType,3) = "DO "
  4683.         cVarVal = SUBSTR( TRIM( cPopChoice ), 4 )
  4684. ? '              lDoOk = .T.'
  4685. ? '              ON ERROR lDoOk = .F.'
  4686.         cDefine = descript
  4687.         cDefine = TRIM( cDefine )
  4688. ? '             ',cDefine
  4689.         cNameLoc = SUBSTR( cDefine, AT( " ", cDefine, 2 ) + 1 )
  4690. ? '              cPopDef =', '"' + cNameLoc + '"'
  4691. ? '              DO', cVarVal
  4692. ? '              ON ERROR'
  4693. ? '              IF lDoOk'
  4694. ? '                SHOW POPUP', cfield
  4695. ? '              ELSE'
  4696. ? '                DO _Err_Box WITH "Error with procedure file: " + '
  4697. ??                                  Delimit( cVarVal )
  4698. ? '              ENDIF'
  4699.       OTHERWISE
  4700. ? '              SET COLOR OF MESS TO', cClrLbR
  4701. ? '              SET COLOR OF TITLE TO', cClrLbR
  4702. ? '              *--------------------------------------------------'
  4703. ? '              *-- Build the popup based on a comma delimited list'
  4704. ? '              *--------------------------------------------------'
  4705.         cDefine = descript
  4706.         cDefine = TRIM( cDefine )
  4707. ? '             ', cDefine
  4708.         nItems = _WhatPara( "aChoice", cPopChoice )
  4709.         n = 1
  4710.         DO WHILE n <= nItems
  4711. ? '                DEFINE BAR', TSTR( n ), 'OF', cField, 'PROMPT '
  4712. ??                        '"' + aChoice[n] + '"'
  4713.           n = n + 1
  4714.         ENDDO
  4715.  
  4716. ? '              SHOW POPUP', cfield
  4717.         RELEASE aChoice
  4718.     ENDCASE
  4719. ? '          ENDCASE'
  4720. ? '        CASE pn_msg = LBN_SETFOC'
  4721. ? '          SET COLOR OF MESS TO', cClrLbR
  4722. ? '          SET COLOR OF TITLE TO', cClrLbR
  4723. TEXT
  4724.           nMsEvent = 0
  4725.           nMess = 0
  4726.           nAccel = 0                    && dBRIEF Tag...
  4727.           pl_IsPop = .T.
  4728.  
  4729.           ON MOUSE DO MsHand WITH MROW(), MCOL(), .T.
  4730.           DO SetOnKey
  4731.           ON KEY LABEL Tab DO TabOut WITH KB_TAB
  4732.           ON KEY LABEL BackTab DO TabOut WITH KB_SHIFTTAB
  4733.  
  4734.           lOk = .T.
  4735.           ON ERROR lOk = .F.
  4736. ENDTEXT
  4737. ? '          ON POPUP', cField, 'DO TList WITH LBN_SELCHA, .F., nCurrent'
  4738. TEXT
  4739.           ON ERROR
  4740.           IF .NOT. lOk
  4741.             DO TList WITH WM_PAINT, WM_DRAWITEM, nCurrent
  4742. ENDTEXT
  4743. ? '            ON POPUP', cField, 'DO TList WITH LBN_SELCHA, .F., nCurrent'
  4744. ? '          ENDIF'
  4745. ? '          ON SELECTION POPUP', cField, 'DO TList WITH LBN_DBLCLK, .F., nCurrent'
  4746. ?
  4747. ? '          *---------------------------------------------'
  4748. ? '          *-- Keyboard to position bar at last selection'
  4749. ? '          *---------------------------------------------'
  4750.  
  4751.             IF cPopType = "FILE"
  4752.  
  4753. ? '          IF .NOT. ISBLANK( CATALOG() )'
  4754. ? '            n =', cVar, '- 2'
  4755. ? '          ELSE'
  4756. ? '            IF',cVar, '= 3'
  4757. ? '              n = 0'
  4758. ? '            ELSE'
  4759. ? '              n = ', cVar, '- 3'
  4760. ? '            ENDIF'
  4761. ? '          ENDIF'
  4762.  
  4763.             ELSE
  4764.  
  4765. ? '          n =', cVar
  4766.  
  4767.             ENDIF
  4768.  
  4769. ? '          IF n > 0'
  4770. ? '            i = 1'
  4771. ? '            DO WHILE i < n'
  4772. ? '              KEYBOARD [{DnArrow}]'
  4773. ? '              i = i + 1'
  4774. ? '            ENDDO'
  4775. ? '          ENDIF'
  4776. ?
  4777. ? '          ACTIVATE POPUP', cField
  4778.  
  4779. TEXT
  4780.           ON KEY LABEL Tab
  4781.           ON KEY LABEL BackTab
  4782.           DO ClrOnKey
  4783.           ON MOUSE
  4784.  
  4785.           pl_IsPop = .F.
  4786.  
  4787. ENDTEXT
  4788. ? '          IF BAR() > 0'
  4789. ? '            IF nMess <> DLN_OK'
  4790. ? '              nMess = KB_ENTER'
  4791. ? '            ENDIF'
  4792. ? '            ON ERROR lOk = .F.'
  4793. ? '            RESTORE SCREEN FROM', cField
  4794. ? '            RELEASE SCREEN', cField
  4795. ? '            ON ERROR'
  4796. ? '          ELSE'
  4797. ? '            IF nMess = 0'
  4798. ? '              IF nMsEvent = KB_MOUSE'
  4799. ? '                nMess = KB_MOUSE'
  4800. ? '                RESTORE SCREEN FROM', cField
  4801. ? '                RELEASE SCREEN', cField
  4802. ? '              ELSE'
  4803. ? '                nMess = LASTKEY()'
  4804. ? '              ENDIF'
  4805. ? '            ELSE'
  4806. ? '              ON ERROR lOk = .F.'
  4807. ? '              RESTORE SCREEN FROM', cField
  4808. ? '              RELEASE SCREEN', cField
  4809. ? '              ON ERROR'
  4810. ? '            ENDIF'
  4811. ? '          ENDIF'
  4812.  
  4813. ? '        CASE pn_msg = LBN_SELCHA'
  4814. ? '          *-- ON POPUP Handler here'
  4815.       cOkCond = ok_cond
  4816.       IF .NOT. ISBLANK( cOkCond )
  4817. ? '          IF pnObject =', TSTR( RECNO() )
  4818. ? '            IF', cOkCond
  4819. ? '            ENDIF'
  4820. ? '          ENDIF'
  4821. ?
  4822.       ENDIF
  4823. ? '        CASE pn_msg = LBN_DBLCLK'
  4824. ? '          SAVE SCREEN TO', cField
  4825. ? '          STORE BAR() TO', cVar
  4826.       IF .NOT. ISBLANK( cOkCond )
  4827. ? '          IF pnObject =', TSTR( RECNO() )
  4828. ? '            IF', cOkCond
  4829. ? '            ENDIF'
  4830. ? '          ENDIF'
  4831. ?
  4832.       ENDIF
  4833. ? '          DEACTIVATE POPUP'
  4834. ? '      ENDCASE'
  4835.  
  4836.   ENDSCAN
  4837.  
  4838. TEXT
  4839.  
  4840.   ENDCASE
  4841.  
  4842. RETURN
  4843. *-- EOP: TList WITH pn_msg, p__data, pnObject
  4844.  
  4845. ENDTEXT
  4846.  
  4847.  
  4848.  
  4849. RETURN
  4850. *-- EOP: GTList
  4851.  
  4852.  
  4853. PROCEDURE GTabOut
  4854. *----------------------------------------------------------------------------
  4855. * NAME
  4856. *   GTabOut -
  4857. *
  4858. * DESCRIPTION
  4859. *
  4860. *----------------------------------------------------------------------------
  4861.  
  4862. TEXT
  4863. PROCEDURE TabOut
  4864. PARAMETERS pn_Key
  4865. *----------------------------------------------------------------------------
  4866. * NAME
  4867. *   TabOut -
  4868. *
  4869. * DESCRIPTION
  4870. *
  4871. * PARAMETERS
  4872. *   pn_Key     =
  4873. *
  4874. *----------------------------------------------------------------------------
  4875.   PRIVATE nRow, nCol, cPath, cPrompt, cDrive
  4876.   nRow = ROW()
  4877.   nCol = COL()
  4878.  
  4879.   DO CASE
  4880. ENDTEXT
  4881.  
  4882.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "LB_,CS_,CD_,CL_,UD_"
  4883.     cField = TRIM( fieldname )
  4884.     cClass = LEFT( fieldname, 3 )
  4885.     cPopChoice = pic_choice
  4886.     cPopType = LEFT( UPPER( cPopChoice ), 4 )
  4887.     cVar = "n" + LEFT( cField, RAT( "_", cField ) - 1 )
  4888.     SET ORDER TO
  4889.     SKIP
  4890.     nPrompt = length - 2
  4891.     SKIP -1
  4892.     SET ORDER TO ObjOrder
  4893. ? '    CASE nCurrent =', TSTR( RECNO() )
  4894.     IF cClass <> "UD_"
  4895. ? '      STORE BAR() TO', cVar
  4896. ? '      *-- Redisplay the bar because of a "feature" in dBASE'
  4897. ? '      cPrompt = TRIM( PROMPT() )'
  4898.     ENDIF
  4899.     DO CASE
  4900.       CASE cPopType = "FILE"
  4901. ? '      cDrive = _FileDrv( cPrompt )'
  4902. ? '      IF .NOT. ISBLANK( cDrive )'
  4903. ? '        cPath = cDrive + ":" + _FilePath( cPrompt )'
  4904. ? '      ELSE'
  4905. ? '        cPath = _FilePath( cPrompt )'
  4906. ? '      ENDIF'
  4907. ? '      cPrompt = TRIM( SUBSTR( cPrompt, LEN( cPath )+1 ) )'
  4908. ? '      cPrompt = LEFT( cPrompt + SPACE(', TSTR( nPrompt )
  4909. ??                 ' ),', TSTR( nPrompt ), ')'
  4910.       CASE cClass <> "UD_"
  4911. ? '      cPrompt = LEFT( cPrompt + SPACE(', TSTR( nPrompt )
  4912. ??                 ' ),', TSTR( nPrompt ), ')'
  4913.       CASE cClass = "UD_"
  4914.         cOkCond = ok_cond
  4915.         cOkCond = TRIM( cOkCond )
  4916.         IF .NOT. ISBLANK( cOkCond )
  4917. ? '        IF', cOkCond
  4918. ? '        ENDIF'
  4919.         ENDIF
  4920.     ENDCASE
  4921.     IF cClass <> "UD_"
  4922. ? '      @ nRow, nCol SAY cPrompt COLOR', cClrLbH
  4923. ? '      SAVE SCREEN TO', cField
  4924. ? '      nMess = pn_Key'
  4925. ? '      KEYBOARD "{LeftArrow}"'
  4926.     ENDIF
  4927.  
  4928.   ENDSCAN
  4929.  
  4930. TEXT
  4931.   ENDCASE
  4932.  
  4933. RETURN
  4934. *-- EOP: TabOut WITH pn_Key
  4935.  
  4936. ENDTEXT
  4937.  
  4938. RETURN
  4939. *-- EOP: GTabOut
  4940.  
  4941.  
  4942. PROCEDURE GTCombo
  4943. *----------------------------------------------------------------------------
  4944. * NAME
  4945. *   GTCombo -
  4946. *
  4947. * DESCRIPTION
  4948. *
  4949. *----------------------------------------------------------------------------
  4950.  
  4951. TEXT
  4952.  
  4953. PROCEDURE TCombo
  4954. PARAMETERS pn_msg, p__data, pnObject
  4955. *----------------------------------------------------------------------------
  4956. * NAME
  4957. *   TCombo -
  4958. *
  4959. * DESCRIPTION
  4960. *
  4961. * PARAMETERS
  4962. *   pn_msg     =
  4963. *   p__data    =
  4964. *   pnObject   =
  4965. *
  4966. *----------------------------------------------------------------------------
  4967.   PRIVATE cDisplay
  4968.   DO CASE
  4969. ENDTEXT
  4970.  
  4971.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) $ "CS_,CD_,CL_"
  4972.     cField = TRIM( fieldname )
  4973.     cClass = LEFT( fieldname, 3 )
  4974.     cPopChoice = pic_choice
  4975.     cPopType = LEFT( UPPER( cPopChoice ), 4 )
  4976.     cVar = "n" + _Proper( LEFT( cField, RAT( "_", cField ) - 1 ) )
  4977.  
  4978. ? '    CASE pnObject =', TSTR( RECNO() )
  4979. ? '      DO CASE'
  4980.  
  4981. ? '        CASE pn_msg = WM_PAINT'
  4982. ? '          DO CASE'
  4983.  
  4984. ? '            CASE p__data = CBN_KILLFOC'
  4985. ? '              DO HasTitle WITH pnObject, BN_UNHILITE'
  4986.  
  4987. ? '            CASE p__data = CB_HIDELST'
  4988. * ? '              RELEASE POPUP', cField
  4989.     cTemplate = TRIM( template )
  4990.     nIcon = AT( " [v]", cTemplate )
  4991.     cIcon = CHR(222) + CHR(25) + CHR(221)
  4992.     IF nIcon > 0
  4993.       cPicture = "'" + SUBSTR( cTemplate, 1, nIcon - 1 ) + "'"
  4994.     ELSE
  4995.       cPicture = "'" + cTemplate + "'"
  4996.     ENDIF
  4997.     nLenCPic = LEN( cPicture )
  4998. ? '              @', TSTR( sys_flen) + ', ' + TSTR( length ), 'GET '
  4999. ??                 cField, 'PICTURE', cPicture
  5000.     IF nIcon > 0
  5001. ? '              @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic - 2 )
  5002. ??                 ' SAY CHR(222) COLOR', cClrBtB
  5003. ? '              @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic - 1 )
  5004. ??                 ' SAY CHR(25) COLOR', cClrBtI
  5005. ? '              @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic     )
  5006. ??                 ' SAY CHR(221) COLOR', cClrBtB
  5007.     ENDIF
  5008. ? '              CLEAR GETS'
  5009.  
  5010. ? '            CASE p__data = CB_SHOWDRO'
  5011.  
  5012. ? '              DO TList WITH WM_PAINT, WM_DRAWITEM, pnObject'
  5013.  
  5014. ? '          ENDCASE'
  5015.  
  5016. ? '        CASE pn_msg = CBN_DROPDOW'
  5017. ? '          SAVE SCREEN TO Tcombo'
  5018. ? '          DO TCombo WITH WM_PAINT, CB_SHOWDRO, pnObject'
  5019. ? '          DO TCombo WITH CBN_INLIST, .F., pnObject'
  5020. ? '          DO TCombo WITH WM_PAINT, CB_HIDELST, pnObject'
  5021. ? '          RESTORE SCREEN FROM Tcombo'
  5022. ? '          RELEASE SCREEN Tcombo'
  5023.     cTemplate = TRIM( template )
  5024.     nIcon = AT( " [v]", cTemplate )
  5025.     cIcon = CHR(222) + CHR(25) + CHR(221)
  5026.     IF nIcon > 0
  5027.       cPicture = "'" + SUBSTR( cTemplate, 1, nIcon - 1 ) + "'"
  5028.     ELSE
  5029.       cPicture = "'" + cTemplate + "'"
  5030.     ENDIF
  5031. ? '          @', TSTR( sys_flen ) + ', ' + TSTR( length )
  5032. ??            ' GET', cField, 'PICTURE', cPicture
  5033. ? '          CLEAR GETS'
  5034.  
  5035. ? '        CASE pn_msg = CB_SELECTS'
  5036. ? '          *-----------------------------------------------------'
  5037. ? '          *-- Do not repaint the get area during scroll re-entry'
  5038. ? '          *-----------------------------------------------------'
  5039. ? '          IF', cVar, '> 0'
  5040. ? '            IF BAR() <>', cVar
  5041. ? '              RETURN'
  5042. ? '            ELSE'
  5043. ? '             ', cVar, '= 0'
  5044. ? '            ENDIF'
  5045. ? '          ENDIF'
  5046. ?
  5047. ? '          IF TYPE( "p__data" ) = "L"'
  5048. ? '            cPrompt = PROMPT()'
  5049. ? '          ELSE'
  5050. ? '            cPrompt = p__data'
  5051. ? '          ENDIF'
  5052.  
  5053.     cTemplate = TRIM( template )
  5054.     nIcon = AT( " [v]", cTemplate )
  5055.     cIcon = CHR(222) + CHR(25) + CHR(221)
  5056.     IF nIcon > 0
  5057.       cPicture = "'" + SUBSTR( cTemplate, 1, nIcon - 1 ) + "'"
  5058.     ELSE
  5059.       cPicture = "'" + cTemplate + "'"
  5060.     ENDIF
  5061.     nLen = IIF( pic_scroll > 0, pic_scroll, LEN( cTemplate ) )
  5062.  
  5063.     IF cPopType = "FILE"
  5064. ? '          cFileRoot = _FileRoot( cPrompt )'
  5065. ? '          IF .NOT. "<" $ cFileRoot'
  5066. ? '            STORE cFileRoot + "." + _FileType( cPrompt ) TO cDisplay'
  5067. ? '            STORE LEFT(', 'cPrompt', '+ SPACE(', TSTR( nLen), '), '
  5068. ??                 TSTR( nLen), ') TO', cField
  5069. ? '            STORE LEFT(', 'cDisplay', '+ SPACE(', TSTR( nLen), '), '
  5070. ??                 TSTR( nLen), ') TO cDisplay'
  5071. ? '            @', TSTR( sys_flen ), ', ' + TSTR( length ), 'GET '
  5072. ??             'cDisplay', 'PICTURE', cPicture
  5073. ? '            CLEAR GETS'
  5074. ? '          ENDIF'
  5075.     ELSE
  5076. ? '          STORE cPrompt TO', cField
  5077. ? '          STORE LEFT(', cField, '+ SPACE(', TSTR( nLen), '), '
  5078. ??                 TSTR( nLen), ') TO', cField
  5079.  
  5080. ? '          @', TSTR( sys_flen ), ', ' + TSTR( length ), 'GET '
  5081. ??             cField, 'PICTURE', cPicture
  5082. ? '          CLEAR GETS'
  5083.     ENDIF
  5084.  
  5085.  
  5086. ? '        CASE pn_msg = CBN_INLIST'
  5087. ? '          SET COLOR OF MESS TO', cClrLbR
  5088. ? '          SET COLOR OF TITLE TO', cClrLbR
  5089. ? '          nMsEvent = 0'
  5090. ? '          nMess = 0'
  5091. ? '          nAccel = 0'
  5092. ? '          pl_IsPop = .T.'
  5093. ? '          ON MOUSE DO MsHand WITH MROW(), MCOL(), .T.'
  5094. ? '          DO SetOnKey'
  5095. ? '          ON KEY LABEL Tab DO TabOut WITH KB_TAB'
  5096. ? '          ON KEY LABEL BackTab DO TabOut WITH KB_SHIFTTAB'
  5097. ? '          ON POPUP', cField, 'DO TCombo WITH CB_SELECTS, .F., pnObject'
  5098. ? '          ON SELECTION POPUP', cField, 'DO TComboSel'
  5099. ?
  5100. ? '          *-------------------------------------------------'
  5101. ? '          *-- Keyboard in down arrows to match prompt string'
  5102. ? '          *-------------------------------------------------'
  5103. ? '          IF', cVar, '> 0'
  5104. ? '            n = 1'
  5105. ? '            nHowMany =', cVar, '- 1'
  5106.     IF cPopType = "FILE"
  5107. ? '            IF ISBLANK( CATALOG() ) '
  5108. ? '              nHowMany = nHowMany - 3'
  5109. ? '            ELSE'
  5110. ? '              nHowMany = nHowMany - 2'
  5111. ? '            ENDIF'
  5112.     ENDIF
  5113. ? '            DO WHILE n <= nHowMany'
  5114. ? '              KEYBOARD [{DnArrow}]'
  5115. ? '              n = n + 1'
  5116. ? '            ENDDO'
  5117. ? '          ENDIF'
  5118. ?
  5119. ? '          ACTIVATE POPUP', cField
  5120. ?
  5121. ? '          pl_IsPop = .F.'
  5122. ? '          ON KEY LABEL Tab'
  5123. ? '          ON KEY LABEL BackTab'
  5124. ? '          DO ClrOnKey'
  5125. ? '          ON MOUSE'
  5126. ?
  5127. ? '          IF BAR() > 0'
  5128.    IF cClass = "CS_"
  5129. ? '            SHOW POPUP', cField
  5130.    ENDIF
  5131. ? '            nMess = KB_ENTER'
  5132. ? '           ', cVar, '= BAR()'
  5133. ? '          ELSE'
  5134. ? '            IF nMess = 0'
  5135. ? '              IF nMsEvent = KB_MOUSE'
  5136. ? '                nMess = KB_MOUSE'
  5137. ? '                RESTORE SCREEN FROM', cField
  5138. ? '                RELEASE SCREEN', cField
  5139. ? '              ELSE'
  5140. ? '                nMess = LASTKEY()'
  5141. ? '              ENDIF'
  5142. ? '            ELSE'
  5143. ? '              RESTORE SCREEN FROM', cField
  5144. ? '              RELEASE SCREEN', cField
  5145. ? '            ENDIF'
  5146. ? '          ENDIF'
  5147. ? '      ENDCASE'
  5148.  
  5149.   ENDSCAN
  5150.  
  5151. TEXT
  5152.  
  5153.   ENDCASE
  5154.  
  5155. RETURN
  5156. *-- EOP: TCombo WITH pn_msg, p__data, pnObject
  5157.  
  5158. PROCEDURE TComboSel
  5159. *----------------------------------------------------------------------------
  5160. * NAME
  5161. *   TComboSel -
  5162. *
  5163. * DESCRIPTION
  5164. *
  5165. *----------------------------------------------------------------------------
  5166.  
  5167.   DO TCombo WITH CB_SELECTS, .F., pnObject
  5168.   DEACTIVATE POPUP
  5169.  
  5170. RETURN
  5171. *-- EOP: TComboSel
  5172.  
  5173. ENDTEXT
  5174.  
  5175. RETURN
  5176. *-- EOP: GTCombo
  5177.  
  5178.  
  5179. PROCEDURE GGetDDL
  5180. *----------------------------------------------------------------------------
  5181. * NAME
  5182. *   GGetDDL -
  5183. *
  5184. * DESCRIPTION
  5185. *
  5186. *----------------------------------------------------------------------------
  5187.  
  5188. TEXT
  5189.  
  5190. PROCEDURE GetDDL
  5191. *----------------------------------------------------------------------------
  5192. * NAME
  5193. *   GetDDL - Get Combo Box Drop Down List
  5194. *
  5195. * DESCRIPTION
  5196. *
  5197. *----------------------------------------------------------------------------
  5198.  
  5199.   lShowDrop = ( nAccel > 0 .OR. nMess = KB_MOUSE ) .AND. nMess <> KB_ENTER
  5200.  
  5201.   DO CASE
  5202. ENDTEXT
  5203.  
  5204.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) = "CL_"
  5205.     cField = TRIM( fieldname )
  5206. ? '    CASE nCurrent =', TSTR( RECNO() )
  5207. ?? '&' + '&' AT 41, cField
  5208.  
  5209. ? '      *-------------------------------------------------'
  5210. ? '      *-- Look to see if the object in focus has a title'
  5211. ? '      *-------------------------------------------------'
  5212. ? '      DO HasTitle WITH nCurrent, BN_HILITE'
  5213.  
  5214.     cTemplate = TRIM( template )
  5215.     nIcon = AT( " [v]", cTemplate )
  5216.     cIcon = CHR(222) + CHR(25) + CHR(221)
  5217.     cPicture = "'" + SUBSTR( cTemplate, 1, nIcon - 1 ) + "'"
  5218.     nLenCPic = LEN( cPicture )
  5219.  
  5220. ? '      @', TSTR( sys_flen) + ', ' + TSTR( length ), 'GET '
  5221. ??         cField, 'PICTURE', cPicture
  5222.     IF nIcon > 0
  5223. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic - 2 )
  5224. ??         ' SAY CHR(222) COLOR', cClrBtB
  5225. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic - 1 )
  5226. ??         ' SAY CHR(25) COLOR', cClrBtI
  5227. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic     )
  5228. ??         ' SAY CHR(221) COLOR', cClrBtB
  5229.     ENDIF
  5230. ? '      CLEAR GETS'
  5231.  
  5232.   ENDSCAN
  5233.  
  5234. TEXT
  5235.  
  5236.   ENDCASE
  5237.  
  5238.   IF lShowDrop
  5239.     nMess = KB_SPACE
  5240.   ELSE
  5241.     SET CONSOLE OFF
  5242.     SET CURSOR OFF
  5243.     WAIT
  5244.     SET CONSOLE ON
  5245.     nMess = LASTKEY()
  5246.     nMRow = MROW()
  5247.     nMCol = MCOL()
  5248.   ENDIF
  5249.  
  5250. RETURN
  5251. *-- EOP: GetDDL
  5252.  
  5253. ENDTEXT
  5254.  
  5255. RETURN
  5256. *-- EOP: GGetDDL
  5257.  
  5258.  
  5259. PROCEDURE GGetDD
  5260. *----------------------------------------------------------------------------
  5261. * NAME
  5262. *   GGetDD -
  5263. *
  5264. * DESCRIPTION
  5265. *
  5266. *----------------------------------------------------------------------------
  5267.  
  5268. TEXT
  5269. PROCEDURE GetDD
  5270. *----------------------------------------------------------------------------
  5271. * NAME
  5272. *   GetDD - Get Edit field for Combo Box Drop Down
  5273. *
  5274. * DESCRIPTION
  5275. *
  5276. *----------------------------------------------------------------------------
  5277.  
  5278.   nMess = 0
  5279.   nAccel = 0
  5280.  
  5281.   *-------------------------------------------------
  5282.   *-- Look to see if the object in focus has a title
  5283.   *-------------------------------------------------
  5284.   DO HasTitle WITH nCurrent, BN_HILITE
  5285.  
  5286.   nMsEvent = 0
  5287.   ON MOUSE DO MsHand WITH MROW(), MCOL()
  5288.   DO SetOnKey
  5289.  
  5290.   DO CASE
  5291. ENDTEXT
  5292.  
  5293.   SCAN FOR currentid > 0 .AND. LEFT( fieldname, 3 ) = "CD_"
  5294.     cField = TRIM( fieldname )
  5295. ? '    CASE nCurrent =', TSTR( RECNO() )
  5296. ?? '&' + '&' AT 41, cField
  5297.     cTemplate = TRIM( template )
  5298.     nIcon = AT( " [v]", cTemplate )
  5299.     cIcon = CHR(222) + CHR(25) + CHR(221)
  5300.     IF pic_scroll > 0
  5301.       cPicture = "'" + SUBSTR( cTemplate, 1, nIcon - 1 ) + "'"
  5302.       nLenCPic = LEN( cPicture )
  5303.       cPicture = "'@S" + TSTR(nLenCPic - 2) + "'"
  5304.     ELSE
  5305.       cPicture = "'" + SUBSTR( cTemplate, 1, nIcon - 1 ) + "'"
  5306.       nLenCPic = LEN( cPicture )
  5307.     ENDIF
  5308.  
  5309. ? '      @', TSTR( sys_flen) + ', ' + TSTR( length ), 'GET '
  5310. ??         cField, 'PICTURE', cPicture
  5311.     IF nIcon > 0
  5312. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic - 2 )
  5313. ??         ' SAY CHR(222) COLOR', cClrBtB
  5314. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic - 1 )
  5315. ??         ' SAY CHR(25) COLOR', cClrBtI
  5316. ? '      @', TSTR( sys_flen ) + ', ' + TSTR( length + nLenCPic     )
  5317. ??         ' SAY CHR(221) COLOR', cClrBtB
  5318.     ENDIF
  5319.  
  5320.   ENDSCAN
  5321.  
  5322. TEXT
  5323.   ENDCASE
  5324.  
  5325.   SET CURSOR ON
  5326.   READ
  5327.   SET CURSOR OFF
  5328.  
  5329.   DO ClrOnKey
  5330.   ON MOUSE
  5331.   IF nMsEvent = KB_MOUSE
  5332.     nMess = KB_MOUSE
  5333.   ELSE
  5334.     nMess = LASTKEY()
  5335.   ENDIF
  5336.  
  5337. RETURN
  5338. *-- EOP: GetDD
  5339.  
  5340. ENDTEXT
  5341.  
  5342. RETURN
  5343. *-- EOP: GGetDD
  5344.  
  5345.  
  5346. PROCEDURE GGetId
  5347. *----------------------------------------------------------------------------
  5348. * NAME
  5349. *   GGetId - Generate GetId()
  5350. *
  5351. * DESCRIPTION
  5352. *
  5353. *----------------------------------------------------------------------------
  5354. TEXT
  5355.  
  5356. FUNCTION GetId
  5357. PARAMETERS pcVar
  5358. *----------------------------------------------------------------------------
  5359. * NAME
  5360. *   GetId() - Search for memvar name and return current_id
  5361. *----------------------------------------------------------------------------
  5362.   PRIVATE nId
  5363.   nId = 0
  5364.  
  5365.   DO CASE
  5366. ENDTEXT
  5367.  
  5368.   GO TOP
  5369.   SET ORDER TO
  5370.   SET FILTER TO 
  5371.   SCAN FOR .NOT. (value_type $ "B,T" ) .AND. .NOT. ISBLANK( fieldname )
  5372. ? '    CASE pcVar = "' + TRIM( fieldname ) + '"'
  5373. ? '      nId =', TSTR( RECNO() )
  5374.   ENDSCAN
  5375.  
  5376. ? '  ENDCASE'
  5377. ?
  5378. ? 'RETURN( nId )'
  5379. ? '*-- EOF: GetId( pcVar)'
  5380. ?
  5381.  
  5382. RETURN
  5383. *-- EOP: GGetId
  5384.  
  5385.  
  5386. PROCEDURE GGenArray
  5387. *----------------------------------------------------------------------------
  5388. * NAME
  5389. *   GGenArray -
  5390. *
  5391. * DESCRIPTION
  5392. *
  5393. *----------------------------------------------------------------------------
  5394.  
  5395. ?
  5396. ? 'PROCEDURE I' + pcDbfDial
  5397.  
  5398. TEXT
  5399. *----------------------------------------------------------------------------
  5400. * NAME
  5401. ENDTEXT
  5402.  
  5403. ? '*   I' + pcDbfDial, ' - Builds the Initialization array for this dialog box'
  5404.  
  5405. TEXT
  5406. *
  5407. * DESCRIPTION
  5408. ENDTEXT
  5409.  
  5410. ? '*   I' + pcDbfDial,'with create a routine that you can call or cut from this'
  5411.  
  5412. TEXT
  5413. *   file to run a dialog box and capture the data on exit.
  5414. *
  5415. *   To run the dialog box,
  5416. ENDTEXT
  5417.  
  5418. ? '*     SET PROCEDURE TO', pcDbfDial
  5419. ? '*     DO I' + pcDbfDial
  5420. ? '* '
  5421. ? '*   Running I' + pcDbfDial,'with use the defaults from the SCR file.  The'
  5422.  
  5423. TEXT
  5424. *   array will remain in memory after execution.
  5425. *
  5426. *   REMEMBER, REGENERATING THE DIALOG BOX WILL OVERWRITE THIS PROCEDURE!
  5427. *
  5428. *----------------------------------------------------------------------------
  5429.  
  5430. ENDTEXT
  5431.  
  5432.   SET ORDER TO ObjOrder
  5433.   SET FILTER TO currentid > 0
  5434.   COUNT TO nItems
  5435.  
  5436. ? '  PUBLIC ARRAY', pcDbfDial + '[', TSTR( nItems ), ']'
  5437.  
  5438.   n = 1
  5439.   SCAN
  5440.       cField = TRIM( fieldname )
  5441.       cClass = LEFT( cField, 3 )
  5442.       cDefault = def_val
  5443.       cDefault = UPPER( TRIM( cDefault ) )
  5444.       lBlankDef = ISBLANK( cDefault )
  5445. ? '    *--', cField, '-',  TRIM( template )
  5446. ? '   ', pcDbfDial + '[', TSTR( n ), ']', '= ' AT 21
  5447.  
  5448.       IF .NOT. lBlankDef
  5449.         Value = &cDefault
  5450.         IF value_type = "C" .AND. .NOT. cClass $ "BT_,LB_,UD_"
  5451.           nValue = LEN( Value )
  5452.           IF pic_scroll > 0
  5453.             nPadding = pic_scroll - nValue
  5454.           ELSE
  5455.             cTemplate = TRIM( template )
  5456.             nLenTemp = LEN( cTemplate )
  5457.             nPadding = nLenTemp - nValue
  5458.           ENDIF
  5459.           IF nPadding > 0
  5460.             Value = Value + SPACE( nPadding )
  5461.           ENDIF
  5462.           cExp = cDefault + " + SPACE( " + LTRIM( STR( nPadding, 3 ) ) + " )"
  5463.         ELSE
  5464.           DO CASE
  5465.             CASE value_type = "C" .AND. cClass = "BT_"
  5466.               Value = &cDefault
  5467.               IF Value = "DEFAULT"
  5468.                 cExp = ".T."
  5469.               ELSE
  5470.                 cExp = ".F."
  5471.               ENDIF
  5472.             CASE value_type = "C" .AND. cClass $ "LB_,UD_"
  5473.               cExp = "0"
  5474.             OTHERWISE
  5475.               cExp = cDefault
  5476.           ENDCASE
  5477.  
  5478.         ENDIF
  5479.       ELSE
  5480.  
  5481.         DO CASE
  5482.           CASE value_type = "C" .AND. cClass = "BT_"
  5483.             cExp = ".F."
  5484.           CASE value_type = "C" .AND. cClass $ "LB_,UD_"
  5485.             cExp = "0"
  5486.           CASE value_type = "C" .AND. .NOT. cClass $ "BT_,LB_,UD_"
  5487.             IF .NOT. ISBLANK( pic_choice )
  5488.               cPopChoice = pic_choice
  5489.               cPopChoice = TRIM( cPopChoice )
  5490.               cPopType = LEFT( UPPER( cPopChoice ), 4 )
  5491.               DO CASE
  5492.                 CASE cPopType = "FILE"
  5493.                   cExp = IIF( pic_scroll > 0, ;
  5494.                           "SPACE( " + LTRIM( STR( pic_scroll,3 ) ) + " )", ;
  5495.                           "SPACE( " + LTRIM( STR( LEN( TRIM( template ) ),3) ) + " )" )
  5496.                 CASE cPopType = "FIEL"
  5497.                   cExp = IIF( pic_scroll > 0, ;
  5498.                           "SPACE( " + LTRIM( STR( pic_scroll,3 ) ) + " )", ;
  5499.                           "SPACE( " + LTRIM( STR( LEN( TRIM( template ) ),3) ) + " )" )
  5500.                 CASE cPopType = "STRU"
  5501.                   cExp = IIF( pic_scroll > 0, ;
  5502.                           "SPACE( " + LTRIM( STR( pic_scroll,3 ) ) + " )", ;
  5503.                           "SPACE( " + LTRIM( STR( LEN( TRIM( template ) ),3) ) + " )" )
  5504.                 CASE LEFT(cPopType,3) = "DO "
  5505.                   cExp = IIF( pic_scroll > 0, ;
  5506.                           "SPACE( " + LTRIM( STR( pic_scroll,3 ) ) + " )", ;
  5507.                           "SPACE( " + LTRIM( STR( LEN( TRIM( template ) ),3) ) + " )" )
  5508.                 OTHERWISE
  5509.                   nComma = AT( ",", cPopChoice )
  5510.                   IF nComma > 0
  5511.                     Value = LEFT( cPopChoice, nComma - 1 )
  5512.                   ELSE
  5513.                     Value = cPopChoice
  5514.                   ENDIF
  5515.  
  5516.                   nValue = LEN( Value )
  5517.                   IF pic_scroll > 0
  5518.                     nPadding = pic_scroll - nValue
  5519.                   ELSE
  5520.                     cTemplate = TRIM( template )
  5521.                     nLenTemp = LEN( cTemplate )
  5522.                     nPadding = nLenTemp - nValue
  5523.                   ENDIF
  5524.                   IF nPadding > 0
  5525.                     cExp = "'"+Value+"'" + " + SPACE( " + LTRIM( STR( nPadding, 3 ) ) + " )"
  5526.                   ELSE
  5527.                     cExp = "'"+Value+"'"
  5528.                   ENDIF
  5529.  
  5530.               ENDCASE
  5531.             ELSE
  5532.               cExp = IIF( pic_scroll > 0, ;
  5533.                       "SPACE( " + LTRIM( STR( pic_scroll,3 ) ) + " )", ;
  5534.                       "SPACE( " + LTRIM( STR( LEN( TRIM( template ) ),3) ) + " )" )
  5535.             ENDIF
  5536.  
  5537.           CASE value_type = "N"
  5538.             cExp = 0
  5539.           CASE value_type = "D"
  5540.             cExp = "{  /  /  }"
  5541.           CASE value_type = "L"
  5542.             cExp = .F.
  5543.           OTHERWISE
  5544.             cExp = .F.
  5545.         ENDCASE
  5546.  
  5547.       ENDIF
  5548.  
  5549.       ?? cExp
  5550.       ?
  5551.       n = n + 1
  5552.  
  5553.     ENDSCAN
  5554.  
  5555.     SET FILTER TO
  5556.  
  5557. TEXT
  5558.   *--------------------------------------------------------------
  5559.   *-- FXL_Cancel is set to .T. is the user Cancels the dialog box
  5560.   *--------------------------------------------------------------
  5561.   FXL_Cancel = .F.
  5562.  
  5563.   *--------------------------------------------------------------
  5564.   *-- FXL_NoChng lets the dialog box know that the values in the
  5565.   *-- array are not different from the SCR file defaults.  This
  5566.   *-- will allow the dialog box to use the .WIN file for a faster
  5567.   *-- startup.
  5568.   *--------------------------------------------------------------
  5569.   FXL_NoChng = .T.
  5570.  
  5571. ENDTEXT
  5572.  
  5573. ? '  DO', pcDbfDial
  5574.  
  5575. TEXT
  5576.  
  5577.   IF .NOT. FXL_Cancel                   && The user clicked on OK
  5578.  
  5579.     *-----------------------------------
  5580.     *-- Put your Ok processing code here
  5581.     *-----------------------------------
  5582.  
  5583.   ENDIF
  5584.  
  5585. ENDTEXT
  5586.  
  5587. ? '  RELEASE', pcDbfDial                && Release the array
  5588. ?
  5589. ? 'RETURN'
  5590. ? '*-- EOP: I' + pcDbfDial
  5591. ?
  5592.  
  5593. RETURN
  5594. *-- EOP: GGenArray
  5595.  
  5596.  
  5597. FUNCTION Delimit
  5598. PARAMETERS pcString
  5599. *----------------------------------------------------------------------------
  5600. * DESCRIPTION
  5601. *
  5602. * PARAMETERS
  5603. *   pcString   = 
  5604. *
  5605. *----------------------------------------------------------------------------
  5606.   IF ASC( pcString ) < 32
  5607.     IF LEN( pcString ) = 1
  5608.       lcResult = "CHR( " + ASC( pcString ) + " )"
  5609.     ELSE
  5610.       IF LEN( pcString ) = 0
  5611.         lcResult = ""
  5612.       ELSE
  5613.         lcResult = "REPLICATE( CHR( " + ASC( pcString ) + " ), " + ;
  5614.                     STR( LEN( pcString ) ) + " )"
  5615.       ENDIF
  5616.     ENDIF
  5617.   ELSE
  5618.     cLeft= '"'
  5619.     cRight = '"'
  5620.     IF AT( '"', pcString ) > 0
  5621.       IF AT( "'", pcString ) > 0
  5622.         cLeft = "["
  5623.         cRight = "]"
  5624.       ELSE
  5625.         cLeft = "'"
  5626.         cRight = "'"
  5627.       ENDIF
  5628.     ENDIF
  5629.     lcResult = cLeft + pcString + cRight
  5630.   ENDIF
  5631.  
  5632. RETURN( lcResult )
  5633. *-- EOF: Delimit( pcString )
  5634. *'---------------------------------------------------------------------
  5635. *' $Log:   C:/test/ccppdbb/prgs/gencode.prv  $
  5636. *'  
  5637. *'     Rev 1.0   06 May 1993  8:14:14   Bill Ramos
  5638. *'  Initial revision.
  5639. *
  5640. *    Rev 1.1   13 Apr 1993 12:36:44   bramos
  5641. * update from bill for beta
  5642. *
  5643. *    Rev 1.0   07 Apr 1993 17:43:58   chofmann
  5644. * Initial revision.
  5645. *'
  5646. *'---------------------------------------------------------------------
  5647.  
  5648.